正则表达式替换开始和结束,忽略中间

时间:2014-06-30 18:23:19

标签: regex ant

在Ant构建文件中,有没有办法使用replaceregexp来查找和替换两个标记,并保留它们之间的内容?例如,要找到所有这些:

</a>1234abcdefg</P>

</a>123456789. </p>

</a> yop </p> 

</a></p>

并替换

</a> and </p> 

<@> and <@@> 

所以我分别拥有:

<@>1234abcdefg@@

<@>123456789. <@@>

<@> yop <@@>

<@><@@>

我不能单独替换标签,因为它们出现在其他地方,我只想在</a>后跟</p>的实例,在同一行,没有任何内容或其他内容在他们之间,我想保留他们之间的内容。

2 个答案:

答案 0 :(得分:0)

解决方案1:您可以试试这个

您将匹配项存储为括号,然后将其替换。

exp = new Regex(@“YourtagStartRegex(bodyRegex)YourtagClosingRegex”);  str = exp.Replace(str,“$ 1”);

参考:Replace the start and end of a string ignoring the middle with regex, how?

或者

解决方案2:

Regex ignore middle part of capture

答案 1 :(得分:0)

试试这个:

<replaceregexp file="notTested.xml" match="(&lt;)\/a(&gt;.*?&lt;)\/p(&gt;)" replace="\1@\2@@\3" byline="true" flags="g" />  

至于but it replaces what's between the tags with .*,我还没有在替换/替换表达式中看到.*。可能它需要它作为文字.*

对于&lt;/a&gt;.*&lt;/p&gt;&gt; .* &lt;在同一行中有</a></p>的多个后缀时不起作用...例如:

</a>1234abcdefg</P>abcde</a>123456789. </p>将替换为

<@>1234abcdefg</P>abcde</a>123456789. <@@>

您需要使用非贪婪量词?。有关.*? vs .*的使用情况,请参阅WiKi