逻辑或组正则表达式

时间:2013-02-06 04:47:58

标签: python regex regex-group

我正在尝试创建一个正则表达式,它会找到错误输入的分数的某些情况,并将分子和分母作为组返回。

这些案例涉及斜杠和数字之间的空格:例如1 /21/ 2

我在正则表达式中使用逻辑或运算符,因为我宁愿没有2个单独的模式来检查:

r'(\d) /(\d)|(\d)/ (\d)'

(我没有使用\d+,因为我对直接接近分区符号的数字更感兴趣,但\d+也可以正常工作。

问题是,当它匹配其中一个案例时,说第二个(1/ 2),查看所有组给出(None, None, '1', '2'),但我想要一个只返回2的正则表达式团体 - 在这两种情况下,我都希望这些团体成为('1','2')。这可能吗?

修改 我还希望它为案例1 / 2返回组('1','2'),但不为像1/2这样的格式良好的分数捕获任何内容。

2 个答案:

答案 0 :(得分:3)

(\d)(?: /|/ | / )(\d)应该这样做(并且只返回错误输入的分数)。注意使用无捕获组。

编辑:通过以下评论进行更新。

答案 1 :(得分:3)

使用(\d)\s*/\s*(\d)怎么样?

这样你总会只有两组:

>>> import re
>>> regex = r'(\d)\s*/\s*(\d)'
>>> re.findall(regex, '1/2')
[('1', '2')]
>>> re.findall(regex, '1 /2')
[('1', '2')]
>>> re.findall(regex, '1/ 2')
[('1', '2')]
>>> re.findall(regex, '1 / 2')
[('1', '2')]
>>>