如何使用正则提取Python JSON字符串中单大括号包裹的变量
解决方案
你遇到的问题根源是转义用的双大括号{{/}}中的首个{、末尾}被原有正则误捕捉,导致匹配结果异常。
正确的正则需要用零宽断言排除双大括号的转义场景,仅匹配单大括号包裹的变量名:
import re sample_string = '{{"some_key_1":"{var1}", "some_key_2":"Hello this is {var2} from {var3}" }}' result = re.findall(r"(?<!{){([^{}]+)}(?!})", sample_string) print(result)
正则逻辑说明
(?<!{):负向零宽后行断言,确保当前匹配的{前面没有其他{,排除转义双大括号的左半部分{:匹配变量包裹用的左大括号([^{}]+):捕获组,匹配所有不包含大括号的字符,即变量名}:匹配变量包裹用的右大括号(?!}):负向零宽先行断言,确保当前匹配的}后面没有其他},排除转义双大括号的右半部分
运行后即可得到预期输出:['var1', 'var2', 'var3']
内容的提问来源于stack exchange,提问作者radix
相关产品推荐
相关产品推荐

