我想匹配<pre></pre>
标签,而不是匹配\\n
,并用</pre><pre>
替换匹配的\\n
。
所以我想用[one, two, three, four, five, six]
匹配一个列表,并用<pre>one</pre><pre>two</pre> etc.
替换它
输入:
<pre> one
two
three
four
five
six </pre>
输出:
<pre>one</pre><pre>two</pre><pre>three</pre><pre>four</pre><pre>five</pre><pre>six</pre>
(?<=<pre>)?(.*)\n+
但是如果我删除第一个<pre>
标记,它仍然是数学,但它不应该
4条答案
按热度按时间cygmwpex1#
你可以使用这个正则表达式来搜索
\G
:并替换为:
RegEx Demo
RegEx详情:
(?:
:启动非捕获组<pre>
:匹配<pre>
|
:或(?!\A)\G
:)
:结束非捕获组*(\S*) *
:匹配0个或多个非空格字符并捕获组#1中的字符。它可以在两侧用0或空格包围(?:
:启动非捕获组(?<!<\/pre>)\n
:如果换行符前面没有结束</pre>
,则匹配换行符|
:或<\/pre>
:匹配</pre>
)
:结束非捕获组(?=[\s\S]*?<\/pre>)
正向预测,以Assert存在</pre>
cx6n0qe32#
大多数语言都提供了一种使用函数来执行regexp替换的方法;例如Python、PHP和JavaScript。因此,您可以使用一个函数替换
<pre></pre>
的匹配项,该函数删除原始标记并将<pre>...</pre>
Package 在每行周围。在Python中,这将是:
soat7uwm3#
因此,如果我理解正确的话,您需要用
<pre></pre>
Package 每一行,同时删除\n
,这样您的结果就是一行。我的方法是将字符串分成三部分:
<pre>
。我们的想法是在替换时总是包含一个<pre>
,这样在它已经存在的情况下更容易首先删除它。</pre>
,以及可能的\n
。这将全部替换为</pre>
。我建议的正则表达式是
(^\s*(<pre>)?\s*)(.*?)(\s*(<\/pre>)?\s*$\n?)
。你想要保留的组是$3
,所以你必须用<pre>$3<\/pre>
替换每个匹配。bttbmeg04#
您可以对
</pre>
使用前瞻Assert,而不传递<pre>
。根据定义正则表达式所使用的环境,有一些注意事项:
.
不能捕获新的行字符。这种行为通常可以用s
标志来改变,或者你可以使用[\s\S]
而不是.
来真正匹配任何字符。建议的正则表达式:
这假设每个
</pre>
都与前面的<pre>
匹配,并且这些标记没有嵌套。