Проверьте, соответствует ли строка образцу

205

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

Верхняя буква, число (число), прописная буква, число (ы)...

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

A1B2
B10L1
C1N200J1

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

a1B2
^
A10B
   ^
AB400
^
  • 3
    не могли бы вы объяснить больше, почему это проблема?
  • 2
    ^([AZ]\d+){1,}$ как это?
Показать ещё 3 комментария
Теги:
string-matching

6 ответов

327
Лучший ответ
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)
  • 4
    Это соответствует пустой строке.
  • 1
    @ Scooter, да, я этого не осознавал. Спасибо за чаевые. К счастью, это не будет проблемой для моего проекта, и если бы когда-нибудь было время, когда это могло быть проблемой, я мог бы просто добавить «если не строка», чтобы исправить это.
Показать ещё 4 комментария
98

One-liner: 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
  • 0
    Отсутствует import re в первой строке
  • 0
    Это странно. Почему вы можете использовать re.match в контексте if , но вы должны использовать bool если вы используете его в другом месте?
Показать ещё 2 комментария
31

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

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())
  • 1
    Это единственный случай, который возвращает совпадение, необходимое для получения групп. Лучший ответ на мой взгляд.
21
import re
import sys

prog = re.compile('([A-Z]\d+)+')

while True:
  line = sys.stdin.readline()
  if not line: break

  if prog.match(line):
    print 'matched'
  else:
    print 'not matched'
7

регулярные выражения делают это легким...

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

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

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

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

6
  
import re

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


Я считаю, что это должно работать для шаблона верхнего, число.

  • 3
    Нет необходимости в {1} поскольку он уже подразумевается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню