C#正则表达式多重匹配

C#正则表达式多重匹配,c#,regex,C#,Regex,我使用这个正则表达式来提取表外的段落 ((?*(?=)|(?*(?=)) 问题在于,它读取所有段落时,就像它们是一个段落一样(从第一个开始标记到最后一个结束标记,没有中间段落)。 下面是一个文本示例。在本例中,它匹配1而不是3 </w:tr></w:tbl><w:p w:rsidR="00F24C60" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:befor

我使用这个正则表达式来提取表外的段落

((?*(?=)|(?*(?=))

问题在于,它读取所有段落时,就像它们是一个段落一样(从第一个开始标记到最后一个结束标记,没有中间段落)。 下面是一个文本示例。在本例中,它匹配1而不是3

</w:tr></w:tbl><w:p w:rsidR="00F24C60" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:p w:rsidR="00F24C60" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:p w:rsidR="00346D4D" w:rsidRPr="00AC7B53" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:tbl><w:tblPr>

是否有助于使其单独匹配每个段落(3个段落)


谢谢。

我想,你不能,因为你想在另一个标记中创建组,但是regex不知道它的结构,它只是从头到尾查看字符串,假设字符串:
eabcabce
如果需要所有abc组,我接下来可以做
(abc)
,但是我不知道我想要
e
之间的所有
abc

您可以使用一些xml解析器

对于此特定情况,您可以尝试两个正则表达式:

  • 使用正则表达式获取tbl标记的内容
  • 使用此正则表达式从
    tbl
    内容获取组
    (]*>.*)
  • 一些链接:

  • 为什么不使用正则表达式解析html(我认为您的xml接近html:)

  • 您的示例字符串只有一个标记
    ,因此您的查找只与第一个段落匹配。然后,您的模式以三个段落之后的下一个
    标记的前瞻结束,以便将这三个标记分组在一起。请尝试删除“回顾”和“展望”,然后您应该将这三个组分开:
    (]*>.\124;]*>.*?(?=)
    这是一个示例字符串,整个文件包含许多表。也就是说,如果删除了“向前看”和“向后看”,正则表达式将匹配表内的段落,而这些段落必须不匹配。在这种情况下,我将捕获您现在捕获的内容-表外的所有段落,然后使用另一个正则表达式和c#拆分这些段落分开。