1

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

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

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

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

(我没有使用\d+,因为我对直接与除号相邻的数字更感兴趣,尽管\d+也可以)。

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

编辑: 我还希望它为 case 返回组 ('1', '2') 1 / 2,但不为格式良好的分数(如1/2.

4

2 回答 2

3

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

编辑:更新了下面的评论。

于 2013-02-06T04:57:50.357 回答
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')]
>>>
于 2013-02-06T06:28:04.300 回答