正则表达式中的OR: 为什么正则找不到变体列表中的元素?

0 投票
1 回答
27 浏览
提问于 2025-04-14 15:36

我有一个字符串,比如:'我昨天得到了11根香蕉'。

我需要从这个字符串中提取出水果的数量和水果的名称。例如,从上面的字符串中提取出'11根香蕉'。

我的代码是:

s1 = 'I got 11 oranges yesterday'
s2 = 'I got 11 bananas yesterday'
regex = re.compile('\d+ oranges|bananas|pencils')
results1 = re.findall(regex, s1) # returns [11 oranges], it's ok
results2 = re.findall(regex, s2) # returns [bananas], it's wrong

这段代码能找到我需要的内容,如果水果的名字在可能的水果列表中是第一个,但如果水果在列表的其他位置,就找不到了。

我哪里出错了?我脑袋都快炸了。

1 个回答

2

问题在于 | 这个运算符的优先级,你写的代码意思是

(\d+ oranges) OR (bananas) OR (pencils)

你需要在水果的部分加上括号

\d+ (?:oranges|bananas|pencils)

撰写回答