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

正则表达式需求:仅当零或多匹配组有捕获时允许尾随下划线

正则表达式解决方案

针对你的需求——当第一个捕获组未匹配内容时,禁止出现下划线,可以通过带条件判断的正则表达式或分支结构实现。

最终正则表达式(条件判断写法)

^\.?(?:([a-zA-Z0-9]+)(?(1)_|(?!_)))(foobar)\.txt$

逻辑拆解

  • ^\.?:匹配开头可选的英文点
  • (?:([a-zA-Z0-9]+)(?(1)_|(?!_))):非捕获组,核心逻辑在这里
    • ([a-zA-Z0-9]+):捕获至少一个字母/数字字符到分组1
    • (?(1)_|(?!_)):条件判断规则:如果分组1有内容,允许匹配下划线;如果分组1为空,通过负向预查(?!_)直接排除下划线的存在
  • (foobar)\.txt$:捕获固定字符串foobar到分组2,匹配结尾的.txt

测试用例验证

  • sometext_foobar.txt:匹配,分组1返回sometext,分组2返回foobar
  • _foobar.txt:不匹配(分组1为空但存在下划线,违反规则)
  • .foobar.txt:匹配,分组2返回foobar(分组1无内容且无下划线)
  • .bcd_foobar.txt:匹配,分组1返回bcd,分组2返回foobar

替代写法(分支结构,更直观)

如果觉得条件判断不够易懂,也可以用分支结构实现相同逻辑:

^(?:\.?([a-zA-Z0-9]+)_|\.?)(foobar)\.txt$
  • 分支1:\.?([a-zA-Z0-9]+)_:匹配「可选点+至少一个字母/数字+下划线」的组合
  • 分支2:\.?:匹配「可选点(无后续字符和下划线)」的情况
  • 两个分支二选一后,再匹配foobar.txt,同样满足需求

内容的提问来源于stack exchange,提问作者RishiD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:20