查找两个子字符串之间的所有字符串


问题内容

我有以下字符串作为示例:

string = "@@ cat $$ @@dog$^"

我想提取所有锁定在“ @@”和“ $”之间的字符串,因此输出为:

[" cat ","dog"]

我只知道如何提取第一次出现的情况:

import re
r = re.compile('@@(.*?)$')
m = r.search(string)
if m:
   result_str = m.group(1)

欢迎对如何抓住它们的想法和建议。


问题答案:

使用re.findall()让您的子每发生。$在正则表达式中被认为是特殊字符,即“
字符串的末尾 ”锚,因此您需要转义$以匹配文字字符。

>>> import re
>>> s = '@@ cat $$ @@dog$^'
>>> re.findall(r'@@(.*?)\$', s)
[' cat ', 'dog']

要删除前导和尾随空格,您只需在捕获组之外进行匹配即可。

>>> re.findall(r'@@\s*(.*?)\s*\$', s)
['cat', 'dog']

另外,如果上下文有可能跨越换行符,则可以考虑使用否定。

>>> re.findall(r'@@\s*([^$]*)\s*\$', s)