与正则表达式方括号混淆

时间:2017-12-19 02:33:42

标签: python regex

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)为什么使用括号;它们只应用于分组,但不需要分组

1 个答案:

答案 0 :(得分:0)

1)方括号不适用于字符序列。它们匹配括号内的任何一个字符。 [abc]匹配a,b或c。如果您使用[^...],它将匹配括号内不包含的任何一个字符。 [^abc]匹配任何非a,b或c。

2)[^\" ]位基本上取代了您的.。它匹配"或空格以外的任何内容。使用+量词,它会保持匹配(贪婪)直到有引号或空格。

3)由于您想获得/beautifulsoup/,因此需要进行分组。使用(),美丽的汤在第1组中。没有组,您将获得整个匹配,即href="/beautifulsoup/