如何修改正则表达式以获取预期匹配结果?正则匹配调试求助
正则表达式修改方案
一、提取目标内容:['abc', 'cba']
原正则因使用两个独立捕获组导致结果出现空值,且未排除无关空格。可通过单个捕获组+正向预查实现精准提取:
正则表达式:-+(.*?)(?=-+|—)
-+:匹配1个或多个半角连字符作为开头(.*?):非贪婪捕获中间的目标内容,避免匹配多余字符(?=-+|—):正向预查,确保内容后紧跟1个或多个半角连字符,或全角破折号,跳过后续空格与无关分隔符
修改后代码:
import re text = '''--abc— --cba--''' res = re.findall(r"-+(.*?)(?=-+|—)", text) print(res) # 输出: ['abc', 'cba']
二、提取带分隔符的完整片段:['--abc—', '--cba--']
原正则分支匹配时,非贪婪模式会意外包含后续分隔符(比如第一个分支会匹配--abc— --)。通过限定分支内的字符范围可避免跨分支误匹配:
正则表达式:-+[^-]*?—|-+[^—]*?-+
- 第一个分支
-+[^-]*?—:匹配以半角连字符开头,中间不含半角连字符,直到全角破折号结束的片段(精准匹配--abc—) - 第二个分支
-+[^—]*?-+:匹配以半角连字符开头,中间不含全角破折号,直到半角连字符结束的片段(精准匹配--cba--)
修改后代码:
import re text = '''--abc— --cba--''' res_02 = re.findall(r"-+[^-]*?—|-+[^—]*?-+", text) print(res_02) # 输出: ['--abc—', '--cba--']
注:正则前的
r表示原生字符串,避免转义字符被Python解析,推荐使用。
内容的提问来源于stack exchange,提问作者tientoen
相关产品推荐
相关产品推荐

