字符串模式正则表达式python
我是正则表达式的新手。我编写了以下正则表达式来查找给定字符串中的字符串模式正则表达式python,python,regex,Python,Regex,我是正则表达式的新手。我编写了以下正则表达式来查找给定字符串中的abababab9。正则表达式返回两个结果,但我希望得到一个结果 testing= re.findall(r'((ab)*[0-9])',temp); **Output**: [('abababab9', 'ab')] 根据我的理解,它应该只返回abababab9,为什么它只返回ab使用?:删除捕获(ab)的第二组: testing= re.findall(r'((?:ab)*[0-9])',temp); 使用内部的?:移除
abababab9
。正则表达式返回两个结果,但我希望得到一个结果
testing= re.findall(r'((ab)*[0-9])',temp);
**Output**: [('abababab9', 'ab')]
根据我的理解,它应该只返回
abababab9
,为什么它只返回ab
使用?:
删除捕获(ab)
的第二组:
testing= re.findall(r'((?:ab)*[0-9])',temp);
使用内部的
?:
移除第二组捕获(ab)
:
testing= re.findall(r'((?:ab)*[0-9])',temp);
使用内部的
?:
移除第二组捕获(ab)
:
testing= re.findall(r'((?:ab)*[0-9])',temp);
使用内部的
?:
移除第二组捕获(ab)
:
testing= re.findall(r'((?:ab)*[0-9])',temp);
您已通过
(…)
两个匹配组配置了第一组为((ab)*[0-9])
,第二组为(ab)
。所以你得到了这两个结果。要仅获取第一个组,可以将第二个组设置为非捕获组。这是由?:
完成的。因此,这一结果并未实现
((?:ab)*[0-9])
此项仅匹配abababab9
编辑1:
下面是对正则表达式分组概念的解释:您已通过
(…)
两个匹配组配置了第一组是((ab)*[0-9])
第二组是(ab)
。所以你得到了这两个结果。要仅获取第一个组,可以将第二个组设置为非捕获组。这是由?:
完成的。因此,这一结果并未实现
((?:ab)*[0-9])
此项仅匹配abababab9
编辑1:
下面是对正则表达式分组概念的解释:您已通过
(…)
两个匹配组配置了第一组是((ab)*[0-9])
第二组是(ab)
。所以你得到了这两个结果。要仅获取第一个组,可以将第二个组设置为非捕获组。这是由?:
完成的。因此,这一结果并未实现
((?:ab)*[0-9])
此项仅匹配abababab9
编辑1:
下面是对正则表达式分组概念的解释:您已通过
(…)
两个匹配组配置了第一组是((ab)*[0-9])
第二组是(ab)
。所以你得到了这两个结果。要仅获取第一个组,可以将第二个组设置为非捕获组。这是由?:
完成的。因此,这一结果并未实现
((?:ab)*[0-9])
此项仅匹配abababab9
编辑1:
下面是对正则表达式分组概念的解释:您没有阅读
findall
文档:
返回字符串中所有非重叠匹配项的列表
如果模式中存在一个或多个捕获组,则返回组列表如果该模式已更改,则这将是一个元组列表
不止一组
结果中包含空匹配项
如果你看一下模块,捕获组是括在括号中的子模式,如(ab)
如果只想获得完全匹配,可以使用以下解决方案之一:
re.findall(r'(?:ab)*[0-9]', temp) # use non-capturing groups
[groups[0] for groups in re.findall(r'(ab)*[0-9]', temp)] # take the first group
[match.group() for match in re.finditer(r'(ab)*[0-9]', temp)] # use finditer
您没有阅读
findall
文档:
返回字符串中所有非重叠匹配项的列表
如果模式中存在一个或多个捕获组,则返回组列表如果该模式已更改,则这将是一个元组列表
不止一组
结果中包含空匹配项
如果你看一下模块,捕获组是括在括号中的子模式,如(ab)
如果只想获得完全匹配,可以使用以下解决方案之一:
re.findall(r'(?:ab)*[0-9]', temp) # use non-capturing groups
[groups[0] for groups in re.findall(r'(ab)*[0-9]', temp)] # take the first group
[match.group() for match in re.finditer(r'(ab)*[0-9]', temp)] # use finditer
您没有阅读
findall
文档:
返回字符串中所有非重叠匹配项的列表
如果模式中存在一个或多个捕获组,则返回组列表如果该模式已更改,则这将是一个元组列表
不止一组
结果中包含空匹配项
如果你看一下模块,捕获组是括在括号中的子模式,如(ab)
如果只想获得完全匹配,可以使用以下解决方案之一:
re.findall(r'(?:ab)*[0-9]', temp) # use non-capturing groups
[groups[0] for groups in re.findall(r'(ab)*[0-9]', temp)] # take the first group
[match.group() for match in re.finditer(r'(ab)*[0-9]', temp)] # use finditer
您没有阅读
findall
文档:
返回字符串中所有非重叠匹配项的列表
如果模式中存在一个或多个捕获组,则返回组列表如果该模式已更改,则这将是一个元组列表
不止一组
结果中包含空匹配项
如果你看一下模块,捕获组是括在括号中的子模式,如(ab)
如果只想获得完全匹配,可以使用以下解决方案之一:
re.findall(r'(?:ab)*[0-9]', temp) # use non-capturing groups
[groups[0] for groups in re.findall(r'(ab)*[0-9]', temp)] # take the first group
[match.group() for match in re.finditer(r'(ab)*[0-9]', temp)] # use finditer
组是什么意思?在
()
中使用的任何内容都会在组中从正则表达式匹配中捕获。在您的正则表达式中有两个()
。何时是使用()parrenthesis的正确时间&何时应该使用(?:)?如果您不需要从匹配中捕获组,则使用?:
。请检查此项。您所说的组是什么意思?您在()
中使用的任何内容都将在组内从正则表达式匹配中捕获。在您的正则表达式中有两个()
。何时是使用()parrenthesis的正确时间&何时应该使用(?)?如果您不需要从m捕获组