正则表达式匹配所有,但最后四位数

时间:2017-06-22 05:16:58

标签: regex

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

(.*\d*)(\d{4})(.*)

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

Online Regular Expressions

答案 1 :(得分:0)

将正则表达式的部分粘合在一起的唯一方法是利用反向引用的功能。您可以详细了解反向引用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

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