如何正确使用regexp match in在以下字符串中查找前3个相关字母

2024-09-27 00:22:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串的变体

i)ABC17/REV100/ABC17

ii)17ABC/REV100/ABC17

iii)ABC17/REV100/17ABC

iv)17ABC/REV100/17ABC

v)REV100/17ABC

vi)第100/17版

vii)17ABC/REV100

viii)17/REV100

ix)第100版

在所有这些情况下,三个字母REV是我想要提取的。如何设置正确的模式以匹配所有这些字符串中的三个字母

编辑:

它不必总是REV或ABC17,它可以是其他字母。规则是它始终位于示例字符串中REV所在的位置

例如,我的模式无法在所有字符串上匹配

 '[0-9]?[A-Z]?.*?/?([A-Z]{3}.*?)','REV100/ABC17').group(1) 
  prints ABC

我如何正确地书写模式


Tags: 字符串字母模式情况rev变体iiiii
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:27

您可以使用一个可选组来匹配1个或多个字符A-Z或数字0-9,因为它们的顺序不同,并且匹配正斜杠

然后使用捕获组捕获正斜杠后的前3个大写字母a-Z

^(?:[A-Z0-9]+/)?([A-Z]{3})
  • ^字符串的开头
  • (?:非捕获组
    • [A-Z0-9]+/匹配列出的任何一个
  • )?关闭组并使其成为可选的
  • ([A-Z]{3})捕获组1,匹配3个大写字符

Regex demoPython demo

如果有以下3位数字:

^(?:[A-Z0-9]+/)?([A-Z]{3})\d{3}

比如说

import re

items = [
    "ABC17/REV100/ABC17",
    "17ABC/REV100/ABC17",
    "ABC17/REV100/17ABC",
    "17ABC/REV100/17ABC",
    "REV100/17ABC",
    "REV100/17",
    "17ABC/REV100",
    "17/REV100",
    "REV100"
    ]

for item in items:
    print(re.match('^(?:[A-Z0-9]+/)?([A-Z]{3})\d{3}',item).group(1))

输出

REV
REV
REV
REV
REV
REV
REV
REV
REV

相关问题 更多 >

    热门问题