如何在以{{开头并以}结尾的字符串中查找所有子字符串

时间:2019-05-21 04:52:07

标签: python

如何在类似于{{ test_variable }的字符串中查找所有子字符串?

s = "hi {{ user }}, samle text, {{ test_variable } 2100210121, testing"

我的尝试:

finds = re.findall(r"(\{{ .*?\}$)", s)

但是此正则表达式返回的子字符串以}}而不是仅以}结尾,因此我在结果中看到不需要的{{ user }}

1 个答案:

答案 0 :(得分:7)

尝试使用以下正则表达式模式:

\{\{\s*([^{} ]+)\s*\}(?=[^}]|$)

这与您使用的类似,但是它在结束}之后使用正向先行,以确保后面的不是另一个}或字符串的结尾

\{\{\s*([^{} ]+)\s*\}   match desired string as {{ STRING }
(?=[^}]|$)              then assert that what follows the final } is NOT
                        another }, or is the end of the entire string

脚本:

s = "hi {{ user }}, samle text, {{ test_variable } 2100210121, testing"
matches = re.findall(r'{{\s*([^{} ]+)\s*}(?=[^}]|$)', s)
print(matches)

['test_variable']