从 HTML 中提取正则表达式和字符串

Posted

技术标签:

【中文标题】从 HTML 中提取正则表达式和字符串【英文标题】:regex and string extraction from HTML 【发布时间】:2017-08-24 18:39:38 【问题描述】:

如何修改以下字符串操作以在下面的 html 代码中查找“要提取的文本”?我不明白"(?<=')[^']+" 我知道这是一个正则表达式模式,我查看了一个网站,但我不明白它的逻辑......也许如果有人告诉我我的问题的方式,我可以更好地理解。 .

if let match = dataString?.range(of: "(?<=')[^']+", options: .regularExpression) 
                        print(dataString?.substring(with: match) as Any)

HTML 代码:

 <span class="phrase">Text to Extract</span></span></span></p> 

【问题讨论】:

不要使用正则表达式解析 HTML:***.com/a/1732454/8332700 简单来说,就是匹配一个或多个不是'的字符的模式,前面是'。但正如@Verv 所说,不要使用正则表达式来解析 HTML。而是在这里尝试解决方案:***.com/questions/31080818/… 对不起,我忘了提到 html 已被下载并编码为 UTF8 字符串.. 可以吗? 你可以使用NSAttributedString:***.com/questions/23757655/… 【参考方案1】:

首先,https://regex101.com/ 是一个免费的在线资源,您可以在其中测试正则表达式,它会解释每个部分的作用。

正则表达式(?&lt;=')[^']+可以分解如下

(?<=<token>) is a positive look-behind for a token. In this case, the char single-quote (')
[^<chars>] match anything not one of the following characters. In this case, the char single-quote (')
+ match the previous token 1 or more times. In this case, [^']

所以上面的正则表达式匹配两个'之间的任何东西。请注意,这没有打开和关闭的概念,因此a'b'c'd'e 将匹配bcd

要匹配文字短语,您只需在正则表达式中使用该短语(使用 \ 转义任何正则表达式特殊字符)。

如果您需要上下文感知(嵌套跟踪)提取,则任何正则表达式都将是固有错误的,您将需要一个 HTML 解析器来为您提取它。

【讨论】:

谢谢,非常有帮助的网站!我可以在编码为字符串 UTF8 的 HTML 上使用正则表达式,还是应该在别处查找? @Dev0urCode 您可以对恰好是 HTML 的文本使用正则表达式。正则表达式没有嵌套的概念,HTML 即使格式错误也可以工作(例如缺少&lt;/span&gt;),并且正则表达式只匹配一个连续模式。所以 Regex 可以找到模式 key-value:"rawr" 并提取 rawr,但它无法从 help &lt;span&gt;&lt;/span&gt;me 中提取“帮助我”。如果您关心尊重 HTML 语法,那么正则表达式的功能还不足以处理它。仅当您可以将字符串视为任何随机文本块时,正则表达式才有效。 你能帮忙吗?我在写code if let match = dataString?.range(of: "(?&lt;=&lt;span class="phrase"&gt;)[^&lt;]+", options: .regularExpression),但 xcode 将正则表达式检测为代码(使用未解析的标识符“短语”)你如何快速格式化? @Dev0urCode 你需要在你的字符串中转义"。正则表达式是正确的,但它也必须在 swift 中格式化为正确的字符串。 抱歉,我在 3 周前开始编码; “逃跑”是什么意思?删除 ?以某种方式创建一个单独的变量?已经尝试删除,但我没有得到我想要的值

以上是关于从 HTML 中提取正则表达式和字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式从 HTML 中提取所有值

Python学习手册之正则表达式示例--邮箱地址提取

从给定字符串中提取 url 的 C# 正则表达式模式 - 不是完整的 html url,而是裸链接

如何使用正则表达式和外壳从字符串中提取值?

有没有一种有效的方法来使用正则表达式从 HTML 字符串中提取数据? [复制]

正则表达式使用 Python 从 HTML 中的 href 属性中提取 URL [重复]