使用正则表达式表示字符串,我们需要删除行中第四个数字的第一个实例之前的所有文本。我们有一个正则表达式,可以“起作用”:
^((?!\d{4}\w).)*
给出以下字符串:
foo-bar-spring_06-2006_02_25.rm
所需的输出是:
2006_02_25.rm
有效-如果只有一个四位数模式的实例。字符串:
batt-fall_01-2001-11-10_0200-0400.rm
产生以下结果:0400.rm
它应该产生:
2001-11-10_0200-0400.rm
注意:长话短说,但我们不能使用-或_作为分隔符。
我觉得我们接近了。有人有建议吗?
谢谢!
答案 0 :(得分:1)
您可以在延迟重复.
之后使用正向超前模式:
^.*?(?=\d{4})
演示:https://regex101.com/r/8DZDQp/1
或者,您可以将4位数字分组:
^.*?(\d{4})
并用第一组$1
代替比赛。
答案 1 :(得分:0)
一个可能更快的选择是忽略开始和不需要的部分,而不使用环视,并且使用类似于以下内容的简单表达式:
(\d{4}.*\..+)$
或:
(\d{4}.*\.[a-z]+)$
结束$
锚也是不必要的,没有锚,它将仍然有效。