【问题标题】:Regex C# conditional extract [duplicate]正则表达式 C# 条件提取 [重复]
【发布时间】:2020-01-24 13:14:59
【问题描述】:

您好,我有一个这样的 xml 文本

<w:p> abc </w:p>
<w:p> def </w:p>
<w:tr #A1b2c3> <w:p> 123 </w:p> </w:tr>
<w:tr #C1d2e3> <w:p> 456 </w:p> </w:tr>
<w:p> ghi </w:p>

我需要提取所有像 abc 这样的段落,除了像 123 这样的表格行中的那些。有什么帮助吗?

【问题讨论】:

  • 改用 XMLParser
  • xpathXElement 应该允许您访问父节点,因此您可以从那里检查该节点是否在 w:tr 节点内。
  • 我必须用正则表达式来做,这是一种义务
  • @SAliaMunch - 它看起来不像 XML - #A1b2c3 是什么东西?
  • @SAliaMunch - 选择使用正则表达式解析 XML 可能最终就像使用木锯进行心脏直视手术一样。

标签: c# regex xml


【解决方案1】:

这看起来不像是有效的 XML,所以正则表达式可能是您唯一的选择:

^<w:p>(.*?)<\/w:p>$

https://regex101.com/r/QsS3tW/1


您可能希望弄清楚该数据是否存在现有解析器,因为显然某些系统必须使用该数据,因为它存在。

【讨论】:

  • 如果段落包含在另一个元素中,例如&lt;w:d&gt;,那么这将失败
  • @LeRoi 我的测试表明它不会根据您的评论失败。
  • 您使用的是^ 符号,表示该行必须以&lt;w:p&gt; 开头才能匹配此表达式
  • @LeRoi 我明白了。正则表达式适用于 OP 的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多