Проверить, соответствует ли строка шаблону

Как проверить, соответствует ли строка этому шаблону?

Прописные буквы, цифры, прописные буквы, цифры ...

Пример, они будут соответствовать:

A1B2
B10L1
C1N200J1

Это не так ('^' указывает на проблему)

a1B2
^
A10B
   ^
AB400
^

person DanielTA    schedule 26.09.2012    source источник
comment
не могли бы вы объяснить, почему это проблема?   -  person John Woo    schedule 26.09.2012
comment
^([A-Z]\d+){1,}$ нравится это?   -  person Passerby    schedule 26.09.2012
comment
В вашем третьем примере проблема должна быть с B, а не с A.   -  person Burhan Khalid    schedule 26.09.2012
comment
возможно это опечатка в проблеме. и A, и B маленькие буквы, верно? A10b и aB400?   -  person John Woo    schedule 26.09.2012
comment
@Burhan, проблема с A, потому что B имеет числа рядом, а A нет   -  person DanielTA    schedule 26.09.2012


Ответы (5)


Однострочный: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

При необходимости вы можете оценить его как bool

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True
person nehem    schedule 13.07.2016
comment
Это странно. Почему вы можете использовать re.match в контексте if, но вы должны использовать bool, если вы используете его в другом месте? - person LondonRob; 13.03.2018
comment
Осторожно с re.match. Он соответствует только началу строки. Взгляните вместо этого на re.search. - person LondonRob; 13.03.2018
comment
@LondonRob, вероятно, потому что if проверяет совпадение не None. - person Dennis; 18.03.2019
comment
Существует большая потребность в компиляции, чтобы убедиться, что в регулярных выражениях нет ошибок, таких как ошибки неверного диапазона символов. - person Suh Fangmbeng; 06.05.2020
comment
@SuhFangmbeng Компиляция полезна, когда один и тот же re используется более чем в одном месте для повышения эффективности. Что касается ошибки, .match выдает ту же ошибку, что и .compile. Совершенно безопасно использовать. - person nehem; 07.05.2020
comment
@nehem фактически все функции регулярных выражений в модуле re компилируют и кэшируют шаблоны. Следовательно, использование компиляции с последующим сопоставлением не дает никакого повышения эффективности, чем простой вызов re.match. Все эти функции вызывают внутреннюю функцию _compile (включая re.compile), которая кэширует словарь Python. - person miksus; 30.06.2021

Пожалуйста, попробуйте следующее:

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())
person sumeet agrawal    schedule 12.02.2015
comment
Это единственный случай, который возвращает совпадение, необходимое для получения групп. На мой взгляд, лучший ответ. - person Rick Smith; 12.12.2016

  
import re

ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
  


Я считаю, что это должно работать с шаблоном прописные буквы, числа.

person Kneel-Before-ZOD    schedule 26.09.2012

регулярные выражения упрощают эту задачу ...

[A-Z] будет соответствовать ровно одному символу между A и Z

\d+ будет соответствовать одной или нескольким цифрам

() группировать вещи (а также возвращать вещи ... но пока просто подумайте об их группировке)

+ выбирает 1 или более

person Joran Beasley    schedule 26.09.2012

person    schedule
comment
Из документов на re.match: If zero or more characters at the beginning of string match the regular expression pattern. Я просто потратил около 30 минут, пытаясь понять, почему я не могу сопоставить что-то в конце строки. Похоже, это невозможно с match, не так ли? Для этого re.search(pattern, my_string) работает. - person conradkleinespel; 11.11.2016
comment
@conradk Да, вы правы, я думаю, что есть что-то вроде подразумеваемого ^ в начале, когда вы используете match. Я думаю, что это немного сложнее, чем это очень простое объяснение, но я не совсем ясен. Вы правы, что он начинается с начала строки. - person CrazyCasta; 11.11.2016
comment
Я отредактировал ваш ответ, потому что он имеет смысл только с search() в данном контексте. - person Robo Robok; 21.02.2021