正则表达式中重复组元素的提取

2024-04-26 23:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

一个字符串包含被“-”或“\”分开的数字,我怎样才能得到字符串中的每一个数字?你知道吗

import re
pattern = re.compile(r'\w(\d+)(?:(?:-|_)(\d+))*\w')

str='a1-2-3_4bc2-3_4d'
m = re.findall(pattern, str)
print(m)

我期望输出是[(1,2,3,4),(2,3,4)],但是它给出了[('1','4'),('2','4')]


Tags: 字符串importrea1数字patternprintcompile
3条回答

编辑:这个答案是基于发布的内容。你知道吗

你就快成功了,试试(\d+)(?:(?:-|_)(\d+))*?

*?      # (zero or more)(lazy)

您已经在使用findall,因此可以将regex简化为:

(\d+)(?:-|_)?

在您的完整示例中,您将得到

import re
pattern = re.compile(r'(\d+)(?:-|_)?')

str='1-2-3_4'
m = re.findall(pattern, str)
print(m)

这是回报

['1', '2', '3', '4']

现在,如果你要把字母放在混合词中,你不妨用超级简单的方法提取所有的数字:

import re
pattern = re.compile(r'(\d+)')

str='1-2-3_4b5'
m = re.findall(pattern, str)
print(m)

那会给你

['1', '2', '3', '4', '5']

但很明显,这是一个不同的匹配,而不是考虑到

这不太可能在一个步骤中完成,这需要同时捕获可变数量的组;您可以尝试以下方法:

import re
s='a1-2-3_4bc2-3_4d'

[re.findall(r'\d+', g.group()) for g in re.finditer(r'[\d_-]+', s)]
# [['1', '2', '3', '4'], ['2', '3', '4']]

相关问题 更多 >