Альтернативные группы захвата в регулярных выражениях? - PullRequest
3 голосов
/ 04 октября 2011

Итак, у меня есть два имени файла:

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')

У меня есть это в случае с двумя разделенными выражениями прямо сейчас, и это работает, но вы знаете, я хотел бы, чтобы это было красивее:)

Спасибо!

е.

Ответы [ 2 ]

8 голосов
/ 04 октября 2011
^(SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$

и получите доступ к дате с помощью \2, или, если oracle поддерживает ?: или эквивалент, используйте ее, чтобы сделать первую группу незаписываемой, и получите доступ к дате с помощью \1.

2 голосов
/ 04 октября 2011

Пожалуйста, попробуйте это регулярное выражение и убедитесь, что проблема все еще возникает:

^(?:SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...