python中的正则表达式

python中的正则表达式,python,regex,Python,Regex,在以下程序中使用括号时,输出为 ['www.google.com'] import re teststring = "href=\"www.google.com\"" m=re.findall('href="(.*?)"',teststring) print m; import re teststring = "href=\"www.google.com\"" m=re.findall('href=".*?"',teststring) print m; 如果在findall函数中删除了括号,

在以下程序中使用括号时,输出为
['www.google.com']

import re
teststring = "href=\"www.google.com\""
m=re.findall('href="(.*?)"',teststring)
print m;
import re
teststring = "href=\"www.google.com\""
m=re.findall('href=".*?"',teststring)
print m;
如果在findall函数中删除了括号,则输出为
['href=“www.google.com”]

import re
teststring = "href=\"www.google.com\""
m=re.findall('href="(.*?)"',teststring)
print m;
import re
teststring = "href=\"www.google.com\""
m=re.findall('href=".*?"',teststring)
print m;
如果有人解释一下它是如何工作的,那会很有帮助。

很清楚区别:

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

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

  • 0捕获模式中的组(无
    (…)
    括号):整个匹配字符串(在第二个示例中为
    'href=“www.google.com”
  • 1模式中的捕获组:返回捕获的组(
    'www.google.com'
    在第一个示例中)
  • 模式中有多个捕获组:返回所有匹配组的元组
如果不希望出现这种行为,请使用非捕获组(
(?:…)
),如果需要更多信息,请添加组。例如,在
href=
部分周围添加一个组将产生一个元组列表,每个元组包含两个元素:

>>> re.findall('(href=)"(.*?)"', teststring)
[('href=', 'www.google.com')]
两者的区别非常明显:

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

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

  • 0捕获模式中的组(无
    (…)
    括号):整个匹配字符串(在第二个示例中为
    'href=“www.google.com”
  • 1模式中的捕获组:返回捕获的组(
    'www.google.com'
    在第一个示例中)
  • 模式中有多个捕获组:返回所有匹配组的元组
如果不希望出现这种行为,请使用非捕获组(
(?:…)
),如果需要更多信息,请添加组。例如,在
href=
部分周围添加一个组将产生一个元组列表,每个元组包含两个元素:

>>> re.findall('(href=)"(.*?)"', teststring)
[('href=', 'www.google.com')]

您提供的代码完全相同。但是,您可能在谈论一般的正则表达式分组。我已经修复了您的示例代码,以实际生成输出(其中也缺少引号)。我留下了多余的分号;python不需要这些。您提供的代码完全相同。但是,您可能在谈论一般的正则表达式分组。我已经修复了您的示例代码,以实际生成输出(其中也缺少引号)。我留下了多余的分号;python不需要这些,为什么要这样呢?如果有多个组,它只会返回一个元组列表(如果这是您的意思的话)。我的疑问是,为什么href=不包含在输出中,即使它与模式匹配。例如,在本例中,组的行为如何。对不起,我是新手python@vindhya:未对
href
进行分组。仅返回由
(.*)
(捕获组)匹配的部分。删除组时,将返回整个匹配项。为什么要这样做?如果有多个组,它只会返回一个元组列表(如果这是您的意思的话)。我的疑问是,为什么href=不包含在输出中,即使它与模式匹配。例如,在本例中,组的行为如何。对不起,我是新手python@vindhya:未对
href
进行分组。仅返回由
(.*)
(捕获组)匹配的部分。删除组时,将返回整个匹配项。