437

如何检查字符串是否与此模式匹配?

大写字母、数字、大写字母、数字...

例如,这些将匹配:

A1B2
B10L1
C1N200J1

这些不会('^'指向问题)

a1B2
^
A10B
   ^
AB400
^
4

7 回答 7

584
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)
于 2012-09-26T05:30:57.923 回答
283

单线: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
于 2016-07-13T03:09:26.930 回答
48

请尝试以下方法:

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())
于 2015-02-12T10:36:25.747 回答
30
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'
于 2012-09-26T05:31:58.760 回答
11

正则表达式使这很容易......

[A-Z]将匹配 A 和 Z 之间的一个字符

\d+将匹配一位或多位数字

()对事物进行分组(并且还返回事物......但现在只考虑它们的分组)

+选择 1 个或多个

于 2012-09-26T05:35:48.250 回答
11
  
import re

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


我相信这应该适用于大写的数字模式。

于 2012-09-26T06:10:00.217 回答
6

如评论中所述,所有这些答案都re.match在字符串的开头使用隐式匹配。re.search如果您想推广到整个字符串,则需要。

import re

pattern = re.compile("([A-Z][0-9]+)+")

# finds match anywhere in string
bool(re.search(pattern, 'aA1A1'))  # True

# matches on start of string, even though pattern does not have ^ constraint
bool(re.match(pattern, 'aA1A1'))  # False

信用:@LondonRob 和 @conradkleinespel 在评论中。

于 2021-09-21T14:46:30.573 回答