正则表达式用占位符替换

本文关键字:替换 占位符 正则表达式 | 更新日期: 2023-09-27 18:14:52

我有一个字符串:

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.*

我认为这将匹配正确的部分,但它也会破坏整个东西。所以我知道有占位符之类的,但不知道如何正确使用它们。这是如何做到的呢?

正则表达式用占位符替换

你可以使用backbehind:

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

确保AAABBB之前。快速测试:

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

试试这样

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

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

另一个解是

(AAA.*?)BBB.*

并替换为来自捕获组的内容1

我不知道c#在多大程度上实现了这些特性,但你可以使用

积极向后看,找到匹配的,不要替换它http://www.regular-expressions.info/lookaround.html

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