大写字母,数字,大写字母,数字...
示例,这些将匹配:
A1B2
B10L1
C1N200J1
这些不会('^'表示问题)
a1B2
^
A10B
^
AB400
^
#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个或更多
评论
您能再解释一下为什么会出现问题吗?^([A-Z] \ d +){1,} $像这样吗?
在您的第三个示例中,问题应该出在B而不是A上。
也许这是一个错字错误。 A和B都是小写字母吧? A10b和aB400?
@Burhan,问题在于A,因为B旁边有数字,而A没有