Python 检查字符串是否与模式匹配
如何检查字符串是否与此模式匹配 大写字母,数字,大写字母,数字 例如,这些将匹配:Python 检查字符串是否与模式匹配,python,regex,string-matching,Python,Regex,String Matching,如何检查字符串是否与此模式匹配 大写字母,数字,大写字母,数字 例如,这些将匹配: A1B2 B10L1 C1N200J1 这些不会(“^”指出问题) 正则表达式使这变得简单 [A-Z]将在A和Z之间恰好匹配一个字符 \d+将匹配一个或多个数字 ()对内容进行分组(也返回内容…但现在只需考虑对它们进行分组) +选择一个或多个 import re ab = re.compile("^([A-Z]{1}[0-9]{1})+$") ab.match(string) 我认为这应该适用于大写
A1B2
B10L1
C1N200J1
这些不会(“^”指出问题)
正则表达式使这变得简单
[A-Z]
将在A和Z之间恰好匹配一个字符
\d+
将匹配一个或多个数字
()
对内容进行分组(也返回内容…但现在只需考虑对它们进行分组)
+
选择一个或多个
import re
ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
我认为这应该适用于大写数字模式。请尝试以下方法:
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)#无需编译
import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
... print('Yes')
...
Yes
如果需要,您可以将其评估为bool
>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True
你能解释一下为什么这是一个问题吗?
^([a-Z]\d+{1,}$
像这样吗?在你的第三个例子中,问题应该是B
而不是a
。可能是这个问题的打字错误。A
和B
都是小写字母,对吗A10b
和aB400
?@Burhan,问题出在A上,因为B旁边有数字,而A不来自re.match
上的文档:如果字符串开头的零个或多个字符与正则表达式模式匹配。我花了大约30分钟试图理解为什么我不能匹配字符串末尾的某个内容。似乎不可能与匹配
,是吗?为此,re.search(pattern,my_string)
仍然有效。@conradk是的,你是对的,我认为当你使用match
时,在开头有一个隐含的^
。我认为这比那个简单的解释要复杂一些,但我不清楚。但是,它确实是从字符串的开头开始的,这是正确的。我编辑了您的答案,因为它仅适用于此上下文中的search()
。这是返回获取组所需的匹配项的唯一情况。在我看来,这是最好的答案。这很奇怪。为什么在if
的上下文中可以使用re.match
,但在其他地方使用时必须使用bool
?小心使用re.match
。它只在字符串的开头匹配。请看一下re.search
。@LondonRob可能是因为if
检查匹配项是否为None
。需要进行大量编译,以确保正则表达式中没有错误,例如坏字符范围errors@SuhFangmbeng当相同的re
用于多个应用程序时,编译非常有用一是提高效率。就错误而言,.match
会抛出与.compile
相同的错误。使用起来非常安全。
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())
import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
... print('Yes')
...
Yes
>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True