我有一个像这样的字符串
- x123-09827 - x456-9908872 - x789-267504
我想要得到所有的价值 123:09827 456:9908872 789:267504
我试过了( - x([0-9] +) - ([0-9])+)+
但它只给我最后一对结果,我通过python测试它
>>> import re
>>> x = "--x123-09827--x456-9908872--x789-267504"
>>> p = "(--x([0-9]+)-([0-9]+))+"
>>> re.match(p,x)
>>> re.match(p,x).groups()
('--x789-267504', '789', '267504')
我应该如何用嵌套重复模式编写?
非常感谢!
大卫
答案 0 :(得分:2)
像这样编码:
x = "--x123-09827--x456-9908872--x789-267504"
p = "--x(?:[0-9]+)-(?:[0-9]+)"
print re.findall(p,x)
答案 1 :(得分:1)
试试这个
p='--x([0-9]+)-([0-9]+)'
re.findall(p,x)
答案 2 :(得分:1)
只需使用.findall
方法,它就可以使表达式更简单。
>>> import re
>>> x = "--x123-09827--x456-9908872--x789-267504"
>>> r = re.compile(r"--x(\d+)-(\d+)")
>>> r.findall(x)
[('123', '09827'), ('456', '9908872'), ('789', '267504')]
您还可以使用.finditer
,这可能对较长的字符串有用。
>>> [m.groups() for m in r.finditer(x)]
[('123', '09827'), ('456', '9908872'), ('789', '267504')]
答案 3 :(得分:1)
使用re.finditer或re.findall。然后,您不需要包含整个表达式的额外括号对。例如,
>>> import re
>>> x = "--x123-09827--x456-9908872--x789-267504"
>>> p = "--x([0-9]+)-([0-9]+)"
>>> for m in re.finditer(p,x):
>>> print '{0} {1}'.format(m.group(1),m.group(2))
答案 4 :(得分:0)
无需使用正则表达式:
>>> "--x123-09827--x456-9908872--x789-267504".replace('--x',' ').replace('-',':').strip()
'123:09827 456:9908872 789:267504'
答案 5 :(得分:0)
您不需要正则表达式。这是一个简单的单行,非正则表达式解决方案:
>>> input = "--x123-09827--x456-9908872--x789-267504"
>>> [ x.replace("-", ":") for x in input.split("--x")[1:] ]
['123:09827', '456:9908872', '789:267504']
如果这是关于正则表达式的练习,这里是一个使用重复(技术上)的解决方案,尽管可能首选findall(...)
解决方案:
>>> import re
>>> input = "--x123-09827--x456-9908872--x789-267504"
>>> regex = '--x(.+)'
>>> [ x.replace("-", ":") for x in re.match(regex*3, input).groups() ]
['123:09827', '456:9908872', '789:267504']