Фильтр регулярных выражений для удаления записей с буквенно-цифровыми символами перед буквой «I» - PullRequest
2 голосов
/ 23 ноября 2008

Нужна помощь в сужении области действия этого регулярного выражения, чтобы не возвращать записи, если перед первым «I» стоит буквенно-цифровой символ

"I([ ]{1,2})([a-zA-Z]|\d){2,13}"

Хочу захватить I APF из этой строки, но не I ARPT.

I APF                     'NAPLES MUNI ARPT.            ' 42894 JEB 29785584 

Спасибо!

Ответы [ 4 ]

5 голосов
/ 23 ноября 2008

\b представляет границу слова в регулярных выражениях, поэтому должно работать следующее (при условии, что вы довольны остальным регулярным выражением):

("\bI([ ]{1,2})([a-zA-Z]|\d){2,13}")

Граница слова определяется как пространство нулевой ширины между символом слова и символом, не являющимся словом. В зависимости от вашего механизма регулярных выражений символ слова может быть буквенно-цифровым символом или подчеркиванием, поэтому использование \ b будет соответствовать I ALF в -I ALF, но не в _I ALF

2 голосов
/ 23 ноября 2008
\bI[ ]{1,2}[A-Za-z0-9]{2,13}
1 голос
/ 23 ноября 2008

Граница слова кажется хорошим решением. Вы не говорите нам, какой движок / язык регулярных выражений вы будете использовать: например, у JavaScript нет заглядывания назад И как указал другой, ваше выражение лица слишком запутанное (что вредит скорости).
Моя версия будет:

\bI  ?[A-Za-z\d]{2,13}

С или без захвата, в зависимости от ваших потребностей. Возможно, вы захотите завершить выражение также \ b, чтобы после выражения не осталось буквенно-цифровых символов.

0 голосов
/ 23 ноября 2008

Вы можете попробовать сделать негативный взгляд:

(?<![a-zA-Z0-9])I([ ]{1,2})([a-zA-Z]|\d){2,13}

Я не уверен, насколько широко он будет работать (т. Е. Используя разные библиотеки регулярных выражений)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...