正则表达式中的替代捕获组?

3

那么,我有这两个文件名:

SomeFile_08_20110225153831.txt.gz
ThatOtherFile_15_20110411125902.txt_11.gz

我想做一个正则表达式,它可以始终返回文件名中日期直到该日的内容。我认为这个正则表达式可以解决问题:

^SomeFile_.*?_([0-9]{8}).*|ThatOtherFile_.*?_([0-9]{8}).*$

(在RegExr中查看)

目前,它只捕获表达式中出现的第一个内容...

最终,我会将其用于Oracle替换中,例如:

REGEXP_REPLACE(
    file_name,
    '^SomeFile_.*?_([0-9]{8}).*|ThatOtherFile_.*?_([0-9]{8}).*$',
    '\1')

我目前将其放在带有两个单独表达式的盒子里,它可以工作,但你知道,我希望它更美观 :)

谢谢!

f.

2个回答

8
^(SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$

使用\2访问日期,或者如果Oracle支持?:或等效的内容,则使用它使第一组不捕获,并使用\1访问日期。


2
请尝试使用这个正则表达式,并验证是否仍然出现相同的问题:
^(?:SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接