2012-02-15 3 views
0

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

  • R[eE]:
  • R[eE]: \[a2geeks\]
  • R[eE]: \[a2geeks\] R[eE]:

Я чувствую, что есть элегантный способ сделать это, но я был боюсь с этим около часа. Лучший ответ также объяснит мне, почему он работает.

+0

Какой вкус регулярных выражений? Какой язык? –

+0

@ Майкл I ... не знал, что были ароматы. Но это будет в коде Python, если это поможет. – Zelbinian

+1

Существуют разные синтаксисы для Perl, POSIX, sed –

ответ

3

Это может сделать эту работу. sed в () являются необязательными по ? (= одно или несколько из предыдущего выражения). Финал R[eE] вложен в большую группу (), так как сначала должен иметь место средний шаблон [a2geeks].

^ указывает, что шаблон должен быть сопоставлен в начале строки, а .* на ned соответствует оставшейся части строки, следующей за этим шаблоном.

^R[eE]:(\s\[a2geeks\](\sR[eE]:)?)?(.*) 
+0

Ах, увидев, что это имеет смысл. Точный оказывается всегда немного отличающимся ('^ R [eE]: \ s (\ [a2geeks \] \ s (R ​​[eE]: \ s)?)?'), Но спасибо. – Zelbinian

1

Использование регулярных выражений дополнительно:

^R[eE]: (\[a2geeks\] (R[eE]:)?)? 
Смежные вопросы