正则表达式:匹配不是特定字符串的序列

-1 投票
2 回答
1242 浏览
提问于 2025-04-16 09:39
s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah blah...'

这只是一个例子,我想找到所有在 _ABC_ 和 _CBA_ 之间的内容。比如 'superman_is_cool'。可能会有多个 _ABC_..._CBA_ 的部分。

re.findall('_ABC_(.*)(?=_CBA_)', s)

我先试了这个,但显然根本不管用。

2 个回答

0

试试这个

re.findall('_ABC_.*_CBA_)', s)
6

我添加了一个额外的 _ABC__CBA_ 组合,以确保它能找到所有的匹配项:

>>> s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah _ABC_blah_CBA_...'
>>> re.findall('_ABC_(.*?)_CBA_', s)
['superman_is_cool', 'blah']

这里的 ?* 这个符号变得不那么贪心,这样它就会尽量找到最短的匹配结果。如果没有这个符号,结果会是 ['superman_is_cool_CBA_ ...blah blah _ABC_blah']

撰写回答