正则表达式用占位符替换
本文关键字:替换 占位符 正则表达式 | 更新日期: 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.*$
确保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
试试这样
(?<=AAA.*?)BBB.*
(?<=AAA.*)
是一个背后的断言,.net能够处理他们没有长度限制,所以它应该为你工作。
另一个解是
(AAA.*?)BBB.*
并替换为来自捕获组的内容1
我不知道c#在多大程度上实现了这些特性,但你可以使用
积极向后看,找到匹配的,不要替换它http://www.regular-expressions.info/lookaround.html
或者您可以存储(AAA.*)部件并将其插入替换