逻辑或分组正则表达式

1 投票
2 回答
856 浏览
提问于 2025-04-17 14:55

我正在尝试写一个正则表达式,用来找出一些输入错误的分数,并把分子和分母提取出来。

这些错误的情况是指在斜杠和数字之间有空格,比如 1 /2 或者 1/ 2

我在正则表达式中使用了逻辑或运算符,因为我不想写两个不同的模式来检查:

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

(我没有使用 \d+,因为我更关注直接与除号相邻的数字,虽然 \d+ 也可以用。)

问题是,当它匹配到某个情况,比如第二个例子(1/ 2)时,查看所有的分组会得到 (None, None, '1', '2'),但我希望正则表达式只返回两个分组——在这两种情况下,我希望得到的分组是 ('1', '2')。这可能吗?

编辑:我还希望对于 1 / 2 这种情况也返回分组 ('1', '2'),但对于像 1/2 这样的正确分数不捕获任何内容。

2 个回答

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')]
>>>
3

(\d)(?: /|/ | / )(\d) 这个表达式应该可以解决问题(并且只会返回输入错误的分数)。注意这里使用了不捕获组。

编辑:下面更新了评论。

撰写回答