【问题标题】:regex and string extraction from HTML从 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> 

【问题讨论】:

标签: regex swift


【解决方案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 周前开始编码; “逃跑”是什么意思?删除 ?以某种方式创建一个单独的变量?已经尝试删除,但我没有得到我想要的值
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多