如果某些部分已经被捕获,如何替换字符串中所有匹配项:
例如给定模式“ AB | BC”和目标“ ABC”,我们匹配“ AB”,但不匹配“ BC”
我一直在尝试了解各种正则表达式分组选项(Grouping Constructs in Regular Expressions),但没有成功。我可能在吠错树。 :-(
var test = Regex.Replace("(AB)(BC)(AC)(ABC)", @"AB|BC", string.Empty);
在示例中,测试的结果为“()()(AC)(C)”,但我真正想要的是“()()(AC)()”
答案 0 :(得分:2)
如果您不注意括号,则可以使用问号来替换可选字符。
用可选的AB
匹配C
或后跟A
匹配可选的BC
。在替换中,使用一个空字符串。
ABC?|A?BC
包括括号在内,您可以使用捕获组或环顾四周来断言左右括号是打开还是关闭括号。
(?<=\()(?:ABC?|A?BC)(?=\))
说明
(?<=\()
断言左侧是(
(?:
非捕获组
ABC?
将AB与可选的C匹配
-|
或A?BC
匹配可选的A和BC )
关闭非捕获组(?=\))
断言右边是)
答案 1 :(得分:2)
要消费重叠的伙伴,必须对其进行匹配。
因此,交替的一面必须包括其伙伴last
或第一个文字(不一定要同时使用)。
AB|BC
〜ABC?|BC
= A?BC|AB