You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式以获取预期匹配结果?正则匹配调试求助

正则表达式修改方案

一、提取目标内容:['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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:55:16