Подтвердить что ты не робот

Регулярное выражение с подстановочными знаками для соответствия любому символу

Я новичок в регулярном выражении, и я пытаюсь найти что-то, что соответствует тексту, как показано ниже:

ABC: (z) jan 02 1999\n

Примечания:

  • текст всегда начинается с "ABC:"
  • может быть ноль, одно или несколько пробелов между ':' и (z).
  • Возможны вариации (z) - (zz), (zzzzzz).. и т.д., но всегда несимметричный символ, заключенный в "()"
  • может быть ноль, один или несколько пробелы между (z) и jan
  • jan может быть jan, january и т.д.
  • дата может быть в любом формате и может содержать/не содержать другой текст как часть Мне бы очень хотелось узнать, есть ли регулярное выражение, которое я могу использовать для захвата все и все, что находится между '(z)' и '\n'

Любая помощь очень ценится! Спасибо вам

4b9b3361

Ответ 1

Следующее должно работать:

ABC: *\([a-zA-Z]+\) *(.+)

Пояснение:

ABC:            # match literal characters 'ABC:'
 *              # zero or more spaces
\([a-zA-Z]+\)   # one or more letters inside of parentheses
 *              # zero or more spaces
(.+)            # capture one or more of any character (except newlines)

Чтобы получить желаемую группировку на основе приведенных ниже комментариев, вы можете использовать следующее:

(ABC:) *(\([a-zA-Z]+\).+)

Ответ 2

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

Глядя на ABC: (z) jan 02 1999 \n

  • Первое, что нужно совместить, это ABC: поэтому с помощью нашего регулярного выражения /ABC:/
  • Вы говорите, что ABC всегда находится в начале строки, поэтому /^ABC/ гарантирует, что ABC находится в начале строки.

  • Вы можете сопоставить пробелы с директивой \s (обратите внимание на случай). Со всеми директивами вы можете сопоставить один или несколько с + (или 0 или более с *)

  • Вам нужно избегать использования ( и ) в качестве зарезервированного символа. поэтому \(\)

  • Вы можете сопоставить любой символ без пробела или новой строки с .

  • Вы можете полностью сопоставить с .*, но вам нужно быть осторожным, чтобы вы не были слишком жадными и захватывали все.

Итак, чтобы захватить то, что вы просили. Я бы использовал /^ABC:\s*\(.+?\)\s*(.+)$/

Что я читаю как:

Начинается с ABC:

Может иметь пробелы

имеет (

имеет некоторые символы

имеет)

может иметь некоторые пробелы

затем запишите все до конца строки (это $).

Я настоятельно рекомендую хранить копию следующей закладки http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/