Python正则表达式代表

2024-04-29 01:41:20 发布

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

我有一根这样的绳子

--x123-09827--x456-9908872--x789-267504

我想得到所有的价值 123:09827 990886分 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')

如何使用嵌套重复模式编写?在

非常感谢!在

大卫


Tags: importrematch模式大卫groups价值绳子
3条回答

只需使用.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,这对较长的字符串可能有帮助。在

^{pr2}$

代码如下:

x = "--x123-09827--x456-9908872--x789-267504"
p = "--x(?:[0-9]+)-(?:[0-9]+)"
print re.findall(p,x)

使用芬代尔或者关于芬德尔. 那么就不需要额外的一对括号来包装整个表达式。例如

    >>> 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))

相关问题 更多 >