逻辑或分组正则表达式
我正在尝试写一个正则表达式,用来找出一些输入错误的分数,并把分子和分母提取出来。
这些错误的情况是指在斜杠和数字之间有空格,比如 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)
这个表达式应该可以解决问题(并且只会返回输入错误的分数)。注意这里使用了不捕获组。
编辑:下面更新了评论。