查找两个子字符串之间的所有字符串
问题内容:
我有以下字符串作为示例:
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)