(?:)正则表达式Python

(?:)正则表达式Python,python,regex,Python,Regex,我今天遇到了一个正则表达式,但它非常糟糕,几乎没有解释。python中的(?:)正则表达式的用途是什么?在何处和何时使用 我试过这个,但似乎不起作用。为什么呢 word = "Hello. ) kahn. ho.w are 19tee,n doing 2day; (x+y)" expressoin = re.findall(r'(?:a-z\+a-z)', word); 从: 普通括号的非捕获版本。匹配任何东西 正则表达式在括号内,但子字符串 执行匹配或删除后,无法检索组匹配的 稍后在模式中引

我今天遇到了一个正则表达式,但它非常糟糕,几乎没有解释。python中的
(?:)
正则表达式的用途是什么?在何处和何时使用

我试过这个,但似乎不起作用。为什么呢

word = "Hello. ) kahn. ho.w are 19tee,n doing 2day; (x+y)"
expressoin = re.findall(r'(?:a-z\+a-z)', word);
从:

普通括号的非捕获版本。匹配任何东西 正则表达式在括号内,但子字符串 执行匹配或删除后,无法检索组匹配的 稍后在模式中引用

基本上,它与
(…)
是一样的,但不在组中存储捕获的字符串

演示:

只返回一个组,其中包含
(?:foo)
组未检测到

每当需要对元字符进行分组时,可以使用此选项,否则这些元字符将应用于表达式的较大部分,例如
|
备用组:

monty's (?:spam|ham|eggs)
您不需要捕获组,但需要限制
元字符的范围

至于你的样品尝试;使用
re.findall()。您很可能正在寻找:

re.findall('([a-z]\+[a-z])', word)
其中
re.findall()
将返回所有捕获组的列表元组;如果只有一个捕获的组,那么它是一个字符串列表,每个匹配只包含一个组

演示:


?:
用于忽略捕获组

例如,在regex
(\d+)
中,匹配将在组
\1


但如果您使用
(?:\d+
,则组
\1

中将没有任何内容,它用于非捕获组:

>>> matched = re.search('(?:a)(b)', 'ab') # using non-capturing group
>>> matched.group(1)
'b'

>>> matched = re.search('(a)(b)', 'ab') # using capturing group
>>> matched.group(1)
'a'
>>> matched.group(2)
'b'

阅读文档!你希望和什么比赛?也许您想匹配
[a-z]\+[a-z]
re.findall('([a-z]\+[a-z])', word)
>>> word = "Hello. ) kahn. ho.w are 19tee,n doing 2day; (x+y)"
>>> re.findall('([a-z]\+[a-z])', word)
['x+y']
>>> matched = re.search('(?:a)(b)', 'ab') # using non-capturing group
>>> matched.group(1)
'b'

>>> matched = re.search('(a)(b)', 'ab') # using capturing group
>>> matched.group(1)
'a'
>>> matched.group(2)
'b'