从 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/ 是一个免费的在线资源,您可以在其中测试正则表达式,它会解释每个部分的作用。
正则表达式(?<=')[^']+
可以分解如下
(?<=<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
将匹配b
、c
和d
。
要匹配文字短语,您只需在正则表达式中使用该短语(使用 \
转义任何正则表达式特殊字符)。
如果您需要上下文感知(嵌套跟踪)提取,则任何正则表达式都将是固有错误的,您将需要一个 HTML 解析器来为您提取它。
【讨论】:
谢谢,非常有帮助的网站!我可以在编码为字符串 UTF8 的 HTML 上使用正则表达式,还是应该在别处查找? @Dev0urCode 您可以对恰好是 HTML 的文本使用正则表达式。正则表达式没有嵌套的概念,HTML 即使格式错误也可以工作(例如缺少</span>
),并且正则表达式只匹配一个连续模式。所以 Regex 可以找到模式 key-value:"rawr"
并提取 rawr,但它无法从 help <span></span>me
中提取“帮助我”。如果您关心尊重 HTML 语法,那么正则表达式的功能还不足以处理它。仅当您可以将字符串视为任何随机文本块时,正则表达式才有效。
你能帮忙吗?我在写code if let match = dataString?.range(of: "(?<=<span class="phrase">)[^<]+", options: .regularExpression)
,但 xcode 将正则表达式检测为代码(使用未解析的标识符“短语”)你如何快速格式化?
@Dev0urCode 你需要在你的字符串中转义"
。正则表达式是正确的,但它也必须在 swift 中格式化为正确的字符串。
抱歉,我在 3 周前开始编码; “逃跑”是什么意思?删除 ?以某种方式创建一个单独的变量?已经尝试删除,但我没有得到我想要的值以上是关于从 HTML 中提取正则表达式和字符串的主要内容,如果未能解决你的问题,请参考以下文章
从给定字符串中提取 url 的 C# 正则表达式模式 - 不是完整的 html url,而是裸链接