Регулярное выражение с подстановочными знаками для соответствия любому символу
Я новичок в регулярном выражении, и я пытаюсь найти что-то, что соответствует тексту, как показано ниже:
ABC: (z) jan 02 1999\n
Примечания:
- текст всегда начинается с "ABC:"
- может быть ноль, одно или несколько пробелов между ':' и (z).
- Возможны вариации (z) - (zz), (zzzzzz).. и т.д., но всегда
несимметричный символ, заключенный в "()"
- может быть ноль, один или несколько
пробелы между (z) и jan
- jan может быть jan, january и т.д.
- дата может быть в любом формате и может содержать/не содержать другой текст как часть
Мне бы очень хотелось узнать, есть ли регулярное выражение, которое я могу использовать для захвата
все и все, что находится между '(z)' и '\n'
Любая помощь очень ценится! Спасибо вам
Ответы
Ответ 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/
Ответ 3
Это должно соответствовать вашим требованиям.
ABC:\s*(\(\D+\)\s*.*?)\\n
Вот некоторые тесты http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html
Далее чтение регулярных выражений: http://www.regular-expressions.info/characters.html