объединить несколько регулярных выражений в одно регулярное выражение - PullRequest
4 голосов
/ 25 марта 2009

Для текстового файла я хочу сопоставить строку, которая начинается с «BEAM» и «FILE PATH». Я бы использовал

^BEAM.*$
^FILE PATH.*$

если бы я соответствовал им по отдельности. Но теперь мне нужно объединить эти два соответствующих шаблона в один шаблон.

Есть идеи, как это сделать?

Ответы [ 3 ]

9 голосов
/ 25 марта 2009

Символ трубы / бара обычно представляет "или" с регулярными выражениями. Вы можете попробовать:

^(BEAM|FILE PATH).*$
5 голосов
/ 25 марта 2009

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

  • ^ означает совпадение с началом строки
  • (BEAM|FILE PATH) - означает строку «ЛУЧ» ​​или строку «ПУТЬ ФАЙЛА»
  • .* означает что-либо вообще
  • $ означает совпадение с концом строки

В сущности, все, что вы говорите, соответствует моим строкам в начале строки, так как вам все равно, что в конце. Вы можете сделать это с:

^(BEAM|FILE PATH)

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

  1. Если вы выполняете какие-то операции с сопоставленной строкой, то вы хотите сопоставить всю строку, чтобы передать данные чему-то другому.

  2. Вы используете функцию регулярного выражения, которая хочет соответствовать всей строке, а не ее части. Иногда это можно решить, выбрав другую функцию или метод регулярного выражения. Например, в Python используйте search вместо match.

1 голос
/ 25 марта 2009

Если приведенный выше пост не работает, попробуйте экранировать () и | по-разному, пока вы не найдете тот, который работает. Некоторые движки регулярных выражений обрабатывают эти символы по-разному (специальные и не специальные символы), особенно если вы запускаете совпадение в оболочке (оболочка будет искать специальные символы):

  • ^\(BEAM|FILE PATH\).*$
  • %\(BEAM\|FILE PATH\).*$
  • и т.д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...