例如,字符串为'10S#9D7T*'
。
我想要的结果是3个数组。 [('10S#'), ('9D'), ('7T*')]
有3个条件。
'#'
或'*'
。但这不是必需的。那是我的代码。
rex = re.compile(r'\d?\d\w?[\*\#]')
str = '10S#9D7T'
print(rex.findall(str))
实际结果-> ['10S#']
只有一个数组。
请修复我的正则表达式模式。
答案 0 :(得分:1)
通过将[*#]
类设为可选,可以获得三个结果。 (此外,请注意,这些字符不需要转义。)
str = '10S#9D7T*'
rex = re.compile(r'\d?\d\w?[*#]?')
print(rex.findall(str))
结果:['10S#', '9D', '7T*']
关于第二条规则,“并且总是跟随一个字符”,您可能希望通过直接删除\w
来使?
为非可选。
r'\d?\d\w[*#]?'
答案 1 :(得分:1)
您可以将\d?\d
更改为\d{1,2}
,并且由于以下字符始终存在,因此该字符不是可选的,因此可以省略问号。不必在字符类中转义*和#并在其上添加问号以使其成为可选。
您可以使用:
\d{1,2}\w[*#]?
这将匹配:
\d{1,2}
匹配1-2位数字\w
匹配单词字符 [*#]?
可选字符类,以匹配*或#
导入 str =“ 10S#9D7T *” rex = re.compile(r'\ d {1,2} [A-Z] [*#]?') 打印(rex.findall(str))
结果
['10S#', '9D', '7T*']