我已经为我的问题寻找解决方案一段时间了,并且已经在 regex101.com 上玩了一段时间但找不到解决方案。
我面临的问题是我必须为不同的输入选择一个字符串,因此我想用正则表达式来从这些字符串中获取想要的数据。 正则表达式将分别来自每个字符串的配置。 (因为它们不同)
下面的字符串是用 XPath 获得的://body/div/table/tbody/tr/td/p[5]
但我不能再深入挖掘它来检索正确的数据还是我可以?
我目前使用的字符串示例如下:
<strong>Kontaktdaten des Absenders:</strong>
<br>
<strong>Name:</strong> Wanted data
<br>
<strong>Telefon:</strong>
<a dir='ltr' href='tel:XXXXXXXXX' x-apple-data-detectors='true' x-apple-data-detectors-type='telephone' x-apple-data-detectors-result='3'>XXXXXXXXX</a>
<br>
我试图从这个字符串中获取“想要的数据”
到目前为止,我的正则表达式如下:
(?<=<\/strong> )(.*)(?= <br>)
但这会返回整体:
<br> <strong>Name:</strong> Wanted data <br> <strong>Telefon:</strong> <a dir='ltr' href='tel:XXXXXXXXX' x-apple-data-detectors='true' x-apple-data-detectors-type='telephone' x-apple-data-detectors-result='3'>XXXXXXXXX</a>
我想我可以用重复组来解决这个问题
((:?(?<=<\/strong> )(.*)(?= <br>))+)
但这会返回与没有重复组时相同的输出。
我知道我可以围绕这个正则表达式构建一个 for { } 循环以获得相同的输出,但由于这是我必须为此执行此操作的唯一正则表达式(但这意味着我必须为所有其他数据更改它)我想知道是否可以在正则表达式中执行此操作。
感谢您迄今为止的支持。
最佳答案
Regex is the wrong tool for parsing markup.您手头有一个合适的 XML 解析工具 XPath。用它完成工作:
这个 XPath,
strong[.='Name:']/following-sibling::text()[1]
当附加到您的原始 XPath 时,
//body/div/table/tbody/tr/td/p[5]/strong[.='Name:']/following-sibling::text()[1]
将完成选择紧跟在 <strong>Name:</strong>
之后的文本节点的工作标签,根据要求,没有对所需标记的正则表达式黑客攻击。
关于c# - 正则表达式反对 XPath 之后的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49320902/