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

时间:2014-12-06 19:53:23

标签: python regex

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

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

我想提取锁定在" @@"之间的所有stringa;和" $",所以输出将是:

[" cat ","dog"]

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

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

思考&欢迎提出如何抓住这些建议的建议。

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)