我试图捕获十进制英寸语句中的数字,而不捕获"。一个在Perl中运行良好的表达式在Python中似乎失败了,我不明白为什么。
在下面的两个表达式中,我希望看到11.5,但在Python中,我希望看到1"1.5",并且它们的工作原理相同。我错过了什么?
Perl语言:

  DB<15> x '1"' =~ m{^(?:(\d+(?:\.\d+)*)")}
0  1
  DB<16> x '1.5"' =~ m{^(?:(\d+(?:\.\d+)*)")}
0  1.5

蟒蛇:
>>> re.search(r'^(?:(\d+(?:\.\d+)*)")', '1"').group()
'1"'
>>> re.search(r'^(?:(\d+(?:\.\d+)*)")', '1.5"').group()
'1.5"'

最终,我希望使用这样的表达:^(?)?:(\d+“)|(?:(\d+(?“:.d+)”)要匹配1'或1“或1.5”,并根据匹配的位置,告诉哪个表达式有效。hwnd指出了我之前忽略的“findall”,因此我希望我的解决方案看起来像:
>>> re.findall(r'^(?:(\d+)\')|(?:(\d+(?:\.\d+)*)")', '1\'')
[('1', '')]
>>> re.findall(r'(?:(\d+)\')|(?:(\d+(?:\.\d+)*)")', '1\' 1" 1.5"')
[('1', ''), ('', '1'), ('', '1.5')]

使用finditer/groupdict/comprehension还有一个有趣的可能性:
>>> [m.groupdict() for m in re.finditer(r'(?P<feet>(\d+)\')|(?P<inches>(\d+(?:\.\d+)*)")', '1\' 1" 1.5"')]
[{'feet': "1'", 'inches': None},
 {'feet': None, 'inches': '1"'},
 {'feet': None, 'inches': '1.5"'}]

感谢大家再次来到Python。

最佳答案

你很容易做到。。

import re

string = 'I have values "1" and "1.5" also "12.555"'
m = re.findall(r'\"(\d+|\d+\.\d+)\"', string)
print ", " . join(m)

输出:
1, 1.5, 12.555

关于python - Perl正则表达式与Python正则表达式非捕获功能似乎有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18237403/

10-13 09:47