我有以下字符串作为示例:
string = "@@ cat $$ @@dog$^"
我想提取锁定在" @@"之间的所有stringa;和" $",所以输出将是:
[" cat ","dog"]
我只知道如何提取第一次出现:
import re
r = re.compile('@@(.*?)$')
m = r.search(string)
if m:
result_str = m.group(1)
思考&欢迎提出如何抓住这些建议的建议。
答案 0 :(得分:5)
使用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)