Skip to main content
 首页 » 编程设计

c#之正则表达式在文本文档的小节中多次匹配捕获组

2024年02月27日33wuhuacong

我正在通过正则表达式过程将 XML 文档作为文本文档传递。

<YaddaYaddaPrecedingMarkup>includes (a) and (b) and (c) and (d) and ... 
 
<MyElement>SECTIONBEGINS (a) Item A (b) Item B (c) Item C (d) Item D</MyElement> 
 
<YaddaYaddaFollowingMarkup>includes (a) and (b) and (c) and (d) and ... 

我希望我的正则表达式捕获项目符号标签 '(a)' '(b)' '(c)' '(d)' 。 ( ..etc...) 出现在“MyElement”中,其文本以“SECTIONBEGINS”开头。

我需要这个正则表达式来忽略出现在我的 XML-as-text 中其他地方的 (a) ... (b) ... (c) 的任何其他实例。

如果我使用:

(\([a-z]\)) 

我在整个文档中匹配 (a)、(b)、(c)。那个表情太放纵了。

如果我使用:

>SECTIONBEGINS(?:.*?)(\([a-z]\))(?:.*)< 

我只在正确的部分内成功匹配,但我只匹配“(a)”(第一个命中),而不是同一部分的 (b)、(c)、(d)。

而且我尝试了很多其他变体,其中一些变体会选择“(d)”,但似乎没有一个能捕获超过一次的命中。

请您参考如下方法:

变体 1:向后看

(?<=SECTIONBEGINS[^>]*)\([a-z]\) 

变体 2:\G anchor + 捕获组

(?:SECTIONBEGINS|\G)[^<(]*(\([a-z]\))