Регулярное выражение для сопоставления X цифр или букв, но не X букв подряд - PullRequest
1 голос
/ 30 марта 2019

Я хочу извлечь 7-символьные совпадения. Каждый символ может быть цифрой или заглавной буквой, но все совпадение не может быть только заглавной буквой. Пример: допустим, у меня есть тестовая строка примерно так:

I want this nr A7A3G1A but not this ANTENNA

Так что я должен получить A7A3G1A, но не ANTENNA. Регулярное выражение для совпадения будет: [A-Z0-9]{7}. Можно ли как-то не допустить только заглавные буквы и все же извлечь 1-е совпадение?

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

Вы можете использовать это регулярное выражение,

\b(?![A-Z]{7})[A-Z0-9]{7}\b

Демо

Здесь границы слов \b гарантируют, что сопоставляется только целое слово, а (?![A-Z]{7}) отрицательный взгляд вперед гарантирует, что сопоставляются не все заглавные буквы, а [A-Z0-9]{7} захватывает слово ровно из семи символов, содержащих сочетание заглавных букв и цифры.

1 голос
/ 30 марта 2019

Другой вариант может состоять в том, чтобы использовать положительный прогноз (?=, а затем убедиться, что он совпадает хотя бы с 1 цифрой.

Используйте границы слов \b, чтобы совпадение не входило в большее слово.

\b(?=[A-Z0-9]{7}\b)[A-Z0-9]+[0-9][A-Z0-9]*

Regex demo

...