2011-11-17 233 views
0

我有一个字符串:正则表达式替换占位符

AAA foobarfoobarfoobar foo baar bar foo BBB and so on 

后替换它应该像looke:

AAA foobarfoobarfoobar foo baar bar foo 

基本BBB,一切的背后应当剥去。所以我的第一个想法是一样的表达式:

BBB.* 

这实际上做的工作。但我只希望这工作,如果BBB代表的AAA后面,让

BBB bbb AAA aaa BBB ccc 

whill更换,以

BBB bbb AAA aaa 

第一BBB下榻因为在它的前面没有AAA。

我的想法是像

AAA.*?BBB.* 

这个表达式将匹配正确的部分,我认为,但它同时也会杀灭整个事情。所以我知道有占位符或什么的,但不能找出如何正确使用它们。这是如何完成的?

回答

1

插入成才尝试这样

(?<=AAA.*?)BBB.* 

(?<=AAA.*)是一个背后的断言,.net能够处理它们没有长度限制,所以它应该为你工作。

另一种解决方案将是

(AAA.*?)BBB.* 

,并与来自捕获组内容替换1

2

你可以使用一个回顾后:

(?<=AAA.*?)BBB.*$ 

这将确保AAA将先BBB。快速测试:

PS> 'BBB bbb AAA aaa BBB ccc' -replace 'AAA.*?BBB.*$' 
BBB bbb 
PS> 'BBB bbb AAA aaa BBB ccc' -replace '(?<=AAA.*)BBB.*$' 
BBB bbb AAA aaa