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

RegEx技术问询:如何排除字符串起始内容提取出生日期

解决正则提取出生日期(排除"b."前缀)的问题

完全不用客气!新手刚接触正则的时候,遇到这类匹配范围的问题太正常了,咱们一步步来解决。

你当前的正则(.+?)(?= -)会从字符串开头开始匹配到" - "为止,所以会把"b. "和后面的出生日期一起抓进来。要排除前面的"b. "前缀,我们可以调整正则,让它从"b. "之后开始匹配:

方案1:使用正向零宽断言定位起始位置

直接用这个正则:

(?<=b\. ).+?(?= -)

解释一下各部分的作用:

  • (?<=b\. ):这是正向零宽后顾断言,它会检查当前位置的前面是否是b. (注意.在正则里是通配符,所以要加反斜杠\转义成实际的点),但不会把这部分包含在匹配结果里。
  • .+?(?= -):和你原来的逻辑一样,非贪婪匹配任意字符,直到遇到" - "为止((?= -)是正向零宽前瞻断言,同样不包含在结果里)。

用你的示例数据测试,会得到:

  • 从( b. circa 1883 - d. Mar 03, 1960 )中提取出circa 1883
  • 从( b. May 21, 1887 - d. Jan 24, 1979 )中提取出May 21, 1887
  • 从( b. May 28, 1902 Zembin, BELARUS - d. Dec...中提取出May 28, 1902 Zembin, BELARUS

方案2:使用捕获分组(更直观的写法)

如果你觉得断言有点抽象,也可以用捕获分组,直接把想要的内容括起来:

b\. (.+?)(?= -)

这个正则会匹配整个b. circa 1883这样的字符串,但你只需要取第一个捕获分组(也就是括号里的.+?部分)就能得到出生日期。这种写法对新手来说可能更容易理解和调试。

额外小提示

如果"b."后面的空格可能有多个(比如有的地方是b. 两个空格),可以把正则里的空格改成+(匹配一个或多个空格),比如:

(?<=b\. +).+?(?= -)

这样就能应对不同的空格情况啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:09:46