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
进行分组。仅返回由(.*)
(捕获组)匹配的部分。删除组时,将返回整个匹配项。