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

时间:2011-10-04 10:21:31

标签: regex string

所以,我有这两个文件名:

SomeFile_08_20110225153831.txt.gz
ThatOtherFile_15_20110411125902.txt_11.gz

我想做一个正则表达式,它总能在任一文件的文件名中将日期返回到日期。以为这会对它进行排序:

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

see it in RegExr

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

最终,我将在Oracle替代排序中使用它:

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

我现在有一个包含两个独立表达式的案例并且它有效,但是你知道,我希望它更漂亮:)

谢谢!

F。

2 个答案:

答案 0 :(得分:8)

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

并使用\2访问日期,或者oracle支持?:或等效使用它来使第一个群组无法捕获并使用\1访问日期。

答案 1 :(得分:2)

请尝试使用此正则表达式并验证您是否仍然遇到同样的问题:

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