PowerShell 正则表达式 - 匹配不包含不同字符串的字符串
PowerShell Regex - match a string that does not include a different string
目标是准备一个 HTML 文件以使用 PowerShell 转换为 Markdown。
PowerShell 脚本包括这些行:
-replace '<pre.*?>(.*?)</pre>', '``'`
-replace '<code.*?>(.*?)</code>', '`<b></b>`'`
有时 HTML 包括 text <pre><code>text</code></pre> text
。有时它只包括 text <code>/text</code> text
.
因为 Markdown 将单反引号 (`) 包围的文本解释为出于文体目的的“代码”,我希望 PowerShell search/replace 为:
- 如果存在
<pre>...</pre>
,请将 <pre>...</pre>
替换为反引号,而不是 <code>...</code>
。
- 如果
<pre>...</pre>
不存在,请将 <code>...</code>
替换为反引号。
(如果我做错了,我将不胜感激。)
我走错了方向,因为我试过的正则表达式都不起作用。
^(?!.*?[</pre>]).*$<code.*?>(.*?)</code>
(没有匹配项)
^((?!</pre>$).)*<code.*?>(.*?)</code>
(即使存在 </pre>
也匹配)
^(?!</pre>$).*<code.*?>(.*?)</code>
(即使存在 </pre>
也匹配)
- 等等
任何人都可以指出我正确的方向吗?感谢您的帮助。
(我知道有一些工具可以自动将 HTML 转换为 Markdown,我正在使用一个 - 这只是基于我们特定输出中的不规则性的独特准备步骤。)
@'
...
... <pre><code>bingo</code></pre> ...
... <code>bongo</code> ...
...
'@ -replace '(?s)(?:(?:<pre>\s*)?<code>)(.*?)(?:</code>(?:\s*</pre>)?)', '``'
注意:为简洁起见,我假设 opening <pre>
和 <code>
标签既不包含属性也不包含结束 >
之前的空格,并且类似地,closing 标签在结束 >
之前不包含空格。像这样的可变性使得使用 专用 HTML 解析器 而不是正则表达式通常更可取。
以上结果:
...
... `bingo` ...
... `bongo` ...
...
(?s)
是使 .
也匹配 newlines 的 SingleLine
内联正则表达式选项(如果值包含在 `...`
中跨越多行 - 但请注意,在以后的 Markdown 渲染中,这些换行符可能会丢失)。
(?:...)
构造是 非 捕获子表达式,对于 逻辑 所需的子表达式很有用原因,而无需稍后引用它们匹配的内容。
目标是准备一个 HTML 文件以使用 PowerShell 转换为 Markdown。
PowerShell 脚本包括这些行:
-replace '<pre.*?>(.*?)</pre>', '``'`
-replace '<code.*?>(.*?)</code>', '`<b></b>`'`
有时 HTML 包括 text <pre><code>text</code></pre> text
。有时它只包括 text <code>/text</code> text
.
因为 Markdown 将单反引号 (`) 包围的文本解释为出于文体目的的“代码”,我希望 PowerShell search/replace 为:
- 如果存在
<pre>...</pre>
,请将<pre>...</pre>
替换为反引号,而不是<code>...</code>
。 - 如果
<pre>...</pre>
不存在,请将<code>...</code>
替换为反引号。
(如果我做错了,我将不胜感激。)
我走错了方向,因为我试过的正则表达式都不起作用。
^(?!.*?[</pre>]).*$<code.*?>(.*?)</code>
(没有匹配项)^((?!</pre>$).)*<code.*?>(.*?)</code>
(即使存在</pre>
也匹配)^(?!</pre>$).*<code.*?>(.*?)</code>
(即使存在</pre>
也匹配)- 等等
任何人都可以指出我正确的方向吗?感谢您的帮助。
(我知道有一些工具可以自动将 HTML 转换为 Markdown,我正在使用一个 - 这只是基于我们特定输出中的不规则性的独特准备步骤。)
@'
...
... <pre><code>bingo</code></pre> ...
... <code>bongo</code> ...
...
'@ -replace '(?s)(?:(?:<pre>\s*)?<code>)(.*?)(?:</code>(?:\s*</pre>)?)', '``'
注意:为简洁起见,我假设 opening <pre>
和 <code>
标签既不包含属性也不包含结束 >
之前的空格,并且类似地,closing 标签在结束 >
之前不包含空格。像这样的可变性使得使用 专用 HTML 解析器 而不是正则表达式通常更可取。
以上结果:
...
... `bingo` ...
... `bongo` ...
...
(?s)
是使.
也匹配 newlines 的SingleLine
内联正则表达式选项(如果值包含在`...`
中跨越多行 - 但请注意,在以后的 Markdown 渲染中,这些换行符可能会丢失)。(?:...)
构造是 非 捕获子表达式,对于 逻辑 所需的子表达式很有用原因,而无需稍后引用它们匹配的内容。