正则表达式匹配含特殊字符的列表元素问题求助
解决正则匹配花括号内容的问题
嘿,你的正则表达式写法有问题导致匹配失败啦!原因主要有两个:
{和}在正则里是特殊字符(用来定义重复次数,比如a{2}表示匹配两个a),所以必须用反斜杠转义才能匹配字面意义的花括号。- 你写的
{*}逻辑不对——*在正则里是量词,会匹配前面的{零次或多次,这完全不是你想要的匹配花括号内内容的逻辑。
要匹配{xxx}这种完整格式的内容,正确的正则表达式应该是r'\{[^}]*\}',拆解一下:
\{:转义左花括号,匹配字面的{[^}]*:匹配任意不是右花括号的字符,零次或多次(这个比用.*?更高效,不会出现过度匹配的情况)\}:转义右花括号,匹配字面的}
给你两种修正方案:
方案一:直接提取所有匹配内容(更简洁)
不用拆分字符串成列表,直接用findall就能一次性拿到所有符合格式的内容:
import re # 编译正确的正则表达式 pattern = re.compile(r'\{[^}]*\}') input_str = 'My {noun2} gave me {number1} dollar bill' # 提取所有匹配项 matches = pattern.findall(input_str) for item in matches: print(item)
方案二:保留拆分列表的逻辑
如果你一定要按单词拆分后再检查,那可以用fullmatch来判断单个单词是否完全符合{xxx}的格式:
import re pattern = re.compile(r'\{[^}]*\}') input_str = 'My {noun2} gave me {number1} dollar bill' word_list = input_str.split(' ') for word in word_list: # 判断当前单词是否完全匹配格式 if pattern.fullmatch(word): print(word)
两种方案运行后都会输出你想要的结果:
{noun2} {number1}
内容的提问来源于stack exchange,提问作者hsekol
相关产品推荐
相关产品推荐

