首页 > 解决方案 > 用于匹配一年前的字符串的正则表达式

问题描述

我有包含年份编号的目录名称。我想将它们拆分为年份编号之前的变量:

输入:

Holidays.uS.2019.bla.bla
Holidays.ca.old.2017.bla.bla
Holidays.2015.bla.bla.bla
Holidays.1.2.3.4.at.old.1999.bla.bla.bla.bla

年份并不总是在同一个地方,但它总是有 4 位数字。

我总是需要一切到今年。

对于输入:

Holidays.ca.old.2017.bla.bla

输出:

Holidays.ca.old

试图

set name Holidays.ca.old.2017.bla.bla
set numbers [regexp -all -inline {[0-9]+} $name]

我的代码的输出是年份数字,有时还有其他错误数字。

标签: regexstringbashtcl

解决方案


此表达式可能会帮助您设计一个:

([\w\.]+)(\.[0-9]{4}.+)

在此处输入图像描述

图形

该图显示了它的工作方式:

在此处输入图像描述

代码:

set string "Holidays.1.2.3.4.at.old.1999.bla.bla.bla.bla"
set match [regsub {([\w\.]+)(\.[0-9]{4}.+)} $string "\\1"]
puts $match

输出

Holidays.1.2.3.4.at.old

推荐阅读