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

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

示例,这些将​​匹配:

A1B2
B10L1
C1N200J1


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

a1B2
^
A10B
   ^
AB400
^


评论

您能再解释一下为什么会出现问题吗?

^([A-Z] \ d +){1,} $像这样吗?

在您的第三个示例中,问题应该出在B而不是A上。

也许这是一个错字错误。 A和B都是小写字母吧? A10b和aB400?

@Burhan,问题在于A,因为B旁边有数字,而A没有

#1 楼

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)

评论


来自re.match的文档:如果字符串开头的零个或多个字符与正则表达式模式匹配。我只花了大约30分钟的时间试图理解为什么我在字符串末尾无法匹配某些内容。似乎无法进行比赛,对吗?为此,re.search(pattern,my_string)可以工作。

– conradkleinespel
16年11月11日15:52



@conradk是的,您是对的,我认为使用match时开头会出现类似^的暗示。我认为这比非常简单的解释要复杂一些,但我不清楚。您是正确的,尽管它确实从字符串的开头开始。

–CrazyCasta
16年11月11日在20:10

#2 楼

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


评论


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

– LondonRob
18年3月13日在13:59

小心重新匹配。它仅在字符串开头匹配。看看re.search吧。

– LondonRob
18年3月13日在14:02

@LondonRob可能是因为如果检查匹配不为None。

–丹尼斯
19年3月18日在13:17

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

– Suh Fangmbeng
20年5月6日在17:10



@SuhFangmbeng编译在多个地方使用相同的资源以提高效率时很有用。就错误而言,.match会抛出与.compile相同的错误。使用起来非常安全。

–nehem
20年5月6日在21:58

#3 楼

请尝试以下操作:

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


评论


这是唯一返回获取组所需的匹配项的情况。我认为最好的答案。

–里克·史密斯
16 Dec 12'在20:59

#4 楼

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'


#5 楼

  
import re

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



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

#6 楼

正则表达式使此操作变得容易。对事物进行分组(并且还返回事物...但是现在就考虑将它们分组)

[A-Z]选择1个或更多