Я использую perl для синтаксического анализа большого файла отчета. Я вытаскиваю имена, ища фамилию и имя в начале некоторых строк отчета. Я пытаюсь исключить текст после имени. Некоторые из этих текстовых полей являются числами, поэтому легко - я просто ищу несимметричные символы. Но некоторые из них являются фиксированными текстовыми полями, которые я могу перечислить.Как исключить определенный текст в perl regexp match
E.g. ---
LastNameA, FirstNameA
LastNameB, FirstNameB 345C
LastNameC, FirstNameC BADTEXT
LastNameD, FirstNameD MOREBADTEXT
Я попытался следующие
/^(\D*)((BADTEXT|MOREBADTEXT|))/
/^(\D*)(BADTEXT|MOREBADTEXT|)/
/^(\D*?)((BADTEXT|MOREBADTEXT|))/
/^(\D*)((BADTEXT|MOREBADTEXT)?)/
/^(\D*)(?:(BADTEXT|MOREBADTEXT|))/
и несколько других комбинаций. Но я не получаю ни матч, ни матч с BADTEXT или MOREBADTEXT, втянутыми в $ 1 вместо $ 2. Я либо хочу, чтобы плохой текст в $ 2, или совсем не совпал.
Обратите внимание, что текст, который я не хочу добавить к имени, будет одним из очень небольшого списка известных текстовых строк, поэтому я могу добавить их в условную группу.
Я прочитал perlretut дважды, но не могу найти, как это сделать. Похоже, это должно быть просто! Буду признателен за любую оказанную помощь.
Просто игнорируйте дополнительный текст, который вы не хотите в своем регулярном выражении: '/ (\ w +), (\ w +) /'? –
Спасибо за комментарий, но это не работает, потому что поле имени иногда имеет средний начальный, JR, SR и т. Д. – lp1756