检查字符串是否匹配模式


316

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

大写字母,数字,大写字母,数字...

例如,这些将匹配:

A1B2
B10L1
C1N200J1

这些不会('^'表示问题)

a1B2
^
A10B
   ^
AB400
^

3
您能否再解释一下为什么会出现问题?
约翰·胡

4
^([A-Z]\d+){1,}$像这样?
路人2012年

在您的第三个示例中,问题应该出在,B而不是A
Burhan Khalid 2012年

也许这是一个错字错误。两者AB小写字母对吗?A10baB400
吴宇森2012年

@Burhan,问题出在A上,因为B旁边有数字,而A旁没有数字
DanielTA 2012年

Answers:


464
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

编辑:如注释中所述,match仅在字符串开头检查匹配项,而re.search()将匹配字符串中任何位置的模式。(另请参见:https : //docs.python.org/library/re.html#search-vs-match


20
从文档上re.matchIf zero or more characters at the beginning of string match the regular expression pattern。我花了大约30分钟的时间试图理解为什么我在字符串末尾无法匹配某些内容。似乎无法使用match,是吗?为此,re.search(pattern, my_string)虽然有效。
conradkleinespel

2
@conradk是的,您是对的,我认为^使用开头时会隐含一些东西match。我认为这比非常简单的解释要复杂一些,但我不清楚。您是正确的,尽管它确实从字符串的开头开始。
CrazyCasta '16

173

单线: 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

缺少import re作为第一行
AROD

那真是怪了。为什么要re.match在中使用if,但bool如果在其他地方使用则必须使用?
LondonRob

16
小心一点re.match。它仅在字符串开头匹配。看看re.search代替。
LondonRob

@LondonRob可能是因为没有if检查比赛None
丹尼斯,

非常需要进行编译以确保正则表达式中没有错误,例如错误的字符范围错误
Suh Fangmbeng

36

请尝试以下操作:

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
这是唯一返回获取组所需的匹配项的情况。我认为最好的答案。
瑞克·史密斯

24
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)
  


我认为这应该适用于大写的数字模式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.