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

如何用正则表达式提取第二个‘-’与第二个‘.’间的非包含字符串?

正则表达式提取特定范围内容(不同分隔符场景)

嘿,这问题我熟!你要从this-is-a.test.sentence这类字符串里精准提取a.test,规则是从第二个-开始、到第二个.结束,还不能包含这两个分隔符对吧?当分隔符是不同字符的时候,核心思路就是精准定位两个不同的分隔节点,然后捕获中间的内容。

直接可用的正则表达式

我给你两种常用写法,按需选就行:

写法1:分组捕获(最直观,适合需要明确提取组的场景)

^[^-]+-[^-]+-(.*?)\..*$

写法2:正向断言(直接匹配目标内容,无需额外取分组)

(?<=^[^-]+-[^-]-).*?(?=\..*)

逐段解释(以写法1为例)

咱们拆解一下每个部分的作用,方便你以后改分隔符:

  • ^:锚定字符串开头,避免匹配到中间的片段
  • [^-]+:匹配任意非-的字符至少一次,对应第一个-之前的this
  • -:精准匹配第一个-
  • [^-]+:再匹配一段非-的字符,对应is
  • -:匹配第二个-,这就是我们要跳过的起始分隔符
  • (.*?):非贪婪匹配任意字符,直到遇到下一个.,这个分组就是我们要的a.test(非贪婪是关键,避免匹配到后面的.)
  • \.:匹配第二个.,也就是结束的分隔符
  • .*$:匹配剩下的所有内容直到字符串结尾,确保整个字符串都被覆盖

灵活调整分隔符

如果以后你的分隔符变了(比如起始分隔是_,结束分隔是|),只需要把正则里的-和.换成对应字符就行。比如:

^[^_]+_[^_]+_(.*?)\|.*$

逻辑完全一致,只是替换了分隔符而已。

测试小提示

你可以用本地编辑器(比如VS Code的正则查找)或者终端工具(比如grep -P、sed)来测试,输入this-is-a.test.sentence,就能看到提取结果正好是a.test。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:26