c# - 正则表达式反对 XPath 之后的标记?

标签 c# html regex xml xpath

我已经为我的问题寻找解决方案一段时间了,并且已经在 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/

相关文章:

c# - 从 C# 运行 MySQL 命令时忽略 @ 符号

javascript - 使用 Javascript 根据现有值更改属性值

javascript - 用于从单词边界交替索引的正则表达式

.net - 正则表达式替换,但仅在两种模式之间

c# - 为什么字段成员的初始化值必须在编译时确定?

c# - {"Object reference not set to an instance of an object."}

c# - 在 wpf 数据网格中动态添加复选框列

jquery - 应用于 Jquery Datepicker 的表格 CSS

html - 如何在 HTML/CSS 中标记速度计/仪表?

php 从字符串中获取子字符串