正则表达式替换为占位符

时间:2011-11-17 11:25:42

标签: c# regex

我有一个字符串:

AAA foobarfoobarfoobar foo baar bar foo BBB and so on

替换后它应该像:

AAA foobarfoobarfoobar foo baar bar foo

基本上BBB及其背后的一切都将被剥夺。所以我的第一个想法就像是:

BBB.*

这实际上是工作。但我只希望这个工作,如果BBB支持AAA,那么

BBB bbb AAA aaa BBB ccc

将被替换为

BBB bbb AAA aaa

第一个BBB留下来因为前面没有AAA。

我的想法是像

这样的表达
AAA.*?BBB.*

这符合我认为的正确部分,但它也会杀死整个事物。所以我知道有占位符或什么,但无法找到如何正确使用它们。这是怎么做到的?

3 个答案:

答案 0 :(得分:2)

你可以使用lookbehind:

(?<=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

答案 1 :(得分:1)

尝试这样的事情

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

(?<=AAA.*)是断言的背后,.net能够在没有长度限制的情况下处理它们,所以它应该适合你。

另一种解决方案是

(AAA.*?)BBB.*

并替换为捕获组1中的内容

答案 2 :(得分:0)

我不知道c#实现这些功能的程度,但您可以使用

积极的后视找到匹配并且不替换它 http://www.regular-expressions.info/lookaround.html

或者您可以存储(AAA。*)部分并将其插入替换