如何在字符串中查找模式

时间:2018-11-04 23:18:01

标签: python regex

在字符串中找到图案位置时,我被卡住了。该字符串是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

3 个答案:

答案 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

请参见Python demoregex demo

模式详细信息

  • \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-Z0-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