我正在尝试创建一个正则表达式,它会找到错误输入的分数的某些情况,并将分子和分母作为组返回。
这些案例涉及斜杠和数字之间的空格:例如1 /2
或1/ 2
。
我在正则表达式中使用逻辑或运算符,因为我宁愿没有2个单独的模式来检查:
r'(\d) /(\d)|(\d)/ (\d)'
(我没有使用\d+
,因为我对直接接近分区符号的数字更感兴趣,但\d+
也可以正常工作。
问题是,当它匹配其中一个案例时,说第二个(1/ 2
),查看所有组给出(None, None, '1', '2')
,但我想要一个只返回2的正则表达式团体 - 在这两种情况下,我都希望这些团体成为('1','2')。这可能吗?
修改
我还希望它为案例1 / 2
返回组('1','2'),但不为像1/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')]
>>>