Python 正则表达式捕获由空格和逗号分隔的数字和破折号

标签 python regex string

我需要捕获1112- -1314-15 等标记>

我希望拒绝任何包含上面未指定的无效标记的字符串,例如 12--4-5-6 这些可以由任意数量的空格分隔,这些空格可能包含也可能不包含单个逗号。所以对于字符串:

43,5 67- -66,53-53 , 6

我想回来

('43', '5', '67-', '-66', '53-53', '6')

这是我试过的:

import re

num = r'\d{1,4}'
token = r'(?:-%s)|(?:%s-%s)|(?:%s-)|(?:%s)' % (num, num, num, num, num)
sep = r'\s*,?\s*'
valid = r'(%s)(?:%s(%s))*' % (token, sep, token)

test = re.compile(valid)
m = test.match("43,5 67-  -66,53-53 , 6")
print(m.groups())

但它只打印第一个和最后一个数字:

('43', '6')

非常感谢任何帮助。

最佳答案

使用re.findall :

>>> re.findall(r'[-\d]+', '43,5 67- -66,53-53 , 6')
['43', '5', '67-', '-66', '53-53', '6']

更新

使用否定环视断言来排除无效匹配。

>>> pattern = r'(?<![-\d])(\d+-\d+|-\d+|\d+-|\d+)(?![-\d])'
>>> re.findall(pattern, '43,5 67- -66,53-53 , 1--, 2, --3, -4-')
['43', '5', '67-', '-66', '53-53', '2']

关于Python 正则表达式捕获由空格和逗号分隔的数字和破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687077/

相关文章:

python - 如何在 python 中用 selenium 单击 <ul> 元素中的 <li> 元素列表?

python - 如何识别 numpy 数组中的最小值,不包括对角线零?

mysql - 在 MYSQL 和 PHP 中存储和查询数组或词组

c - 如何删除字符串中的元音

c++ - 从 C++ 函数返回字符串数组

java - 如何计算以字符串形式给出的数学表达式?

python - 序列化和反序列化 lambda

python - numpy csv导入问题

regex - 如何用一个正则表达式匹配命令行中的参数?

regex - 如何通过从结果中排除标签来捕获 <TAGs> 中的文本?