检查字符串是否与模式匹配

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

大写字母,数字,大写字母,数字…

例如,这些将匹配:

A1B2
B10L1
C1N200J1

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

a1B2
^
A10B
^
AB400
^
822408 次浏览
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)
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'

正则表达式使这很容易…

[A-Z]将在A和Z之间精确匹配一个字符

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

()分组对象(并且返回对象…但现在只考虑他们的分组)

+选择1个或多个


import re


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

< p >
我相信这应该适用于大写字母,数字模式

请尝试以下方法:

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

一行程序: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

正如注释中所述,所有这些使用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

如果你需要完整的字符串来精确匹配正则表达式,请参见@Ali Sajjad的回答 using re.fullmatch

来源:@LondonRob和@conradkleinespel在评论中。

小心!(也许你想检查FULL字符串是否匹配)

如果你想匹配完整的字符串,re.match(...)将不起作用。

例如;

  • re.match("[a-z]+", "abcdef")✅会给出一个匹配
  • 但是!re.match("[a-z]+", "abcdef 12345")✅也会给出一个匹配,因为字符串中有一个匹配的部分(也许当你检查整个字符串是否有效时,你不希望这样)

解决方案

使用re.fullmatch(...)。仅当

if re.fullmatch("[a-z]+", my_string):
print("Yes")
例子
  • re.fullmatch("[a-z]+", "abcdef")✅是的
  • re.fullmatch("[a-z]+", "abcdef 12345")❌否

一个衬套: bool(re.fullmatch("[a-z]+", my_string))