【问题标题】:confused with regular expression square brackets [duplicate]与正则表达式方括号混淆[重复]
【发布时间】:2018-06-01 10:24:35
【问题描述】:
response = 'li><a href="/beautifulsoup/" title="BeautifulSoup"><......'

我打算捕获的是/beautifulsoup/

这是正确的代码

link =re.findall(r'href=\"?([^\" ]+)',response)

这是我的代码

link =re.findall(r'><a\b href=\"? .\"\b',response)

我有三个问题:

1) 为什么使用方括号。它们只能用于字符中的某些序列

2) 为什么没有'.'问号后的正确代码

3) 为什么要使用括号;它们应该只用于分组,但不需要分组

【问题讨论】:

  • 你得到了别人的反对,因为你的问题被谷歌简单地回答了。但是,好消息是您可以查看regex101.com 并输入您想要的任何字符串和正则表达式,它会返回结果以及每个部分的颜色编码说明。但也请不要做太多parsing of html with regex
  • 顺便说一句,don't use regular expressions to parse html/xml。了解如何使用 DOM 和 xml 解析器。我个人推荐 lxml

标签: python regex


【解决方案1】:

1) 方括号不适用于字符序列。它们匹配括号内的任何一个字符。 [abc] 匹配 a、b 或 c。如果你使用[^...],它将匹配任何一个不在括号内的字符。 [^abc] 匹配任何不是 a、b 或 c 的东西。

2) [^\" ] 位实质上取代了您的 .。它匹配除" 或空格之外的任何内容。使用+ 量词,它会一直匹配(贪婪地)直到出现引号或空格。

3) 既然要获取/beautifulsoup/,就需要分组。有(),美汤在第1组。没有组,你会得到整场比赛,即href="/beautifulsoup/

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2023-03-08
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多