在字符串中找到图案位置时,我被卡住了。该字符串是6个字符,由仅大写字母(A-Z)或数字(0-9)组成。
check_string = 'I have a string 09A4N5'
我必须找到'09A4N5'的位置,该位置可以是任何其他格式相似的字符串。我尝试使用正则表达式,并能够找到下面提到的解决方案,该解决方案给出了单词'string'的位置。
re.search('\w+\w+\w+\w+\w+\w',check_string).start()
9
答案 0 :(得分:2)
您可以使用
m = re.search(r'\b[A-Z0-9]{6}\b', check_string)
if m:
print(m.group()) # => 09A4N5
print(m.start(0)) # => 16
模式详细信息
\b
-单词边界
[A-Z0-9]
-大写ASCII字母或数字{6}
-正好六次\b
-单词边界。如果要在正则表达式中要求至少一个数字和至少一个大写字母,请使用
r'\b(?=[A-Z]*\d)(?=\d*[A-Z])[A-Z0-9]{6}\b'
请参见regex demo。在这里,
(?=[A-Z]*\d)
-至少需要一位数字(?=\d*[A-Z])
-至少需要一个大写字母答案 1 :(得分:1)
编辑:刚看到它总是六个字符。
您要搜索A-Z
或0-9
及其组合。使用[..]
,您可以定义一个字符集:
re.findall(r"[A-Z0-9]{6}", check_string)
{6}
说,您只需要6个字符。
通过search
找到该职位:
res = re.search(r"[A-Z0-9]{6}", check_string)
res.span()
答案 2 :(得分:0)
check_string = 'I have a string 09A4N5'
for i, x in enumerate(check_string.split()):
if len(x) < 6 or any([ i.islower() for i in x ]):
continue
else:
idx = check_string.index(x)
match = x
print('position:', idx, '- string:', match)
# position: 16 - string: 09A4N5