繁体   English   中英

C# 正则表达式多重匹配

[英]C# Regex multiple matching

我有这个正则表达式来提取表格之外的段落

((?<=<\/w:tbl>)<w:p [^>]*>.*?<\/w:p>(?=<w:tbl>)|(?<=<\/w:tbl>)<w:p [^>]*>.*?<\/w:p>(?=<w:sectPr.*>))

问题是它读取所有段落,就好像它们是一个段落一样(从第一个开始标记到最后一个结束标记,没有中间段落)。 下面是一个文本示例。 在这种情况下,它匹配一个而不是 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段)?

谢谢。

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

您可以使用一些 xml 解析器。

对于这种特殊情况,您可以尝试两个正则表达式:

  1. 使用您的正则表达式获取 tbl 标签的内容在此处输入图像描述
  2. 使用此正则表达式从tbl内容中获取组(<w:p [^>]*>.*?<\/w:p>) 在此处输入图像描述

一些链接:

  1. 为什么不用正则表达式解析 html (我认为您的 xml 接近html :))
  2. https://www.regextester.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM