python中的正则表达式

Dha*_*tri 1 python regex

当括号用于下面的程序输出时 ['www.google.com'].

import re
teststring = "href=\"www.google.com\""
m=re.findall('href="(.*?)"',teststring)
print m;
Run Code Online (Sandbox Code Playgroud)

如果在findall函数中删除了括号,则输出为['href="www.google.com"'].

import re
teststring = "href=\"www.google.com\""
m=re.findall('href=".*?"',teststring)
print m;
Run Code Online (Sandbox Code Playgroud)

如果有人解释它是如何工作的将是有帮助的.

Mar*_*ers 5

re.findall()文件是在差异相当明显:

返回字符串中pattern的所有非重叠匹配,作为字符串列表.[...]如果模式中存在一个或多个组,则返回组列表; 如果模式有多个组,这将是一个元组列表.

因此,.findall()返回一个包含三种类型值之一的列表,具体取决于模式中的组数:

  • 0捕获模式中的组(无(...)括号):整个匹配的字符串('href="www.google.com"'在第二个示例中).
  • 1捕获模式中的组:返回捕获的组('www.google.com'在第一个示例中).
  • 模式中超过1个捕获组:返回所有匹配组的元组.

(?:...)如果您不想要该行为,请使用非捕获组();如果需要更多信息,请添加组.例如,在href=零件周围添加一个组将产生一个元组列表,每个元组包含两个元素:

>>> re.findall('(href=)"(.*?)"', teststring)
[('href=', 'www.google.com')]
Run Code Online (Sandbox Code Playgroud)