我想在字符串中提取apple
和each
之间的子字符串。但是,如果each
后跟box
,我希望结果为空字符串。
详细来说,它表示:
1)apple costs 5 dollars each
-> costs 5 dollars
2)apple costs 5 dollars each box
->``
我尝试了re.findall('(?<=apple)(.*?)(?=each)'))
。
它可以解决1)但不能解决2)。
如何解决问题?
谢谢。
答案 0 :(得分:2)
您可以添加否定的前瞻,断言右边的不是 box
。对于比赛,您只能省略捕获组。
(?<=apple).*?(?=each(?! box))
如果您不想匹配前导空间,则可以将其添加到环顾四周
import re
s = "apple costs 5 dollars each"
print(re.findall(r'(?<=apple ).*?(?= each(?! box))', s))
输出
['costs 5 dollars']
您还可以使用不带正向前瞻性的捕获组,而仅使用负向前瞻性。该值在第一个捕获组中。
您可以利用单词边界\b
来防止该单词成为较大单词的一部分。
\bapple\b(.*?)\beach\b(?! box)
答案 1 :(得分:1)