【问题标题】:Regex match everything but last four digits正则表达式匹配除最后四位之外的所有内容
【发布时间】:2017-06-22 05:16:58
【问题描述】:

我需要对字符串中的所有内容进行正则表达式匹配,除了最后一个四位数字序列。

abc12345 => abc1
abc1234abc => abcabc
abc123.45678abc => abc123.4abc
1234abc => abc
12345abc => 1abc

我尝试了很多很多东西。我得到的最接近的是

.*[^(\d{4})]

但是当四个字符的最后一个序列后面有字符时,这会失败。

【问题讨论】:

  • 你使用什么编程语言?

标签: regex


【解决方案1】:

将正则表达式的各个部分粘合在一起的唯一方法是利用反向引用的力量。您可以了解更多关于反向引用here

这段代码解决了你的问题,你可以看正则表达式演示here:

([a-z0-9.]*)\d{4}([a-z0-9]+)

基本上,每当您将某些内容放入普通括号 () 时,这将被视为反向引用,([a-z0-9.]*) 这将是第一个反向引用,([a-z0-9]+) 这将是第二个。例如,如果你想要这个正则表达式:

([a-z0-9.]*)([a-z0-9.]*)

您可以使用对该括号的反向引用:

([a-z0-9.]*)\1

当然,这可以简单地解决:

([a-z0-9.]*){2}

但在这种情况下{2} 必须紧跟在正则表达式之后,与反向引用相反,在它们被定义之后,它们可以在任何地方使用。例如:

([a-z0-9.]*) Continuation of regular expression \1

从您的问题来看,您正在使用哪种编程语言尚不清楚。但是,大多数编程语言都支持反向引用。您要做的是像这样创建正则表达式,然后访问第一个和第三个反向引用,将它们连接起来并提取文本。

【讨论】:

    【解决方案2】:
    (.*\d*)(\d{4})(.*)
    

    这将允许您合并第 1 场和第 3 场比赛。

    Online Regular Expressions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2021-05-26
      • 2022-08-21
      • 2018-05-26
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多