Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查字符串是否与模式匹配_Python_Regex_String Matching - Fatal编程技术网

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