鉴于正则表达式和下面的单词,我想匹配 - (也可以是_或空格)之后的部分,只有当分隔符后面的部分是数字而后面没有任何内容时(我基本上想要只是一个数字和数字)。我正在使用组语句,但它似乎不正常。它在开头时保持匹配3(如果我稍微修改它,则在结尾处保持匹配)。我如何实现这一点(通过使用分组)?
目标词:BR0227-3G1
正则表达式:([A-Z]*\s?[0-9]*)[\s_-]*([1-9][1-9]*)
它不应该与3G1,G1,1G
匹配它应该只匹配像3,10,2等纯数字。
这里还有一个帮助网站来评估正则表达式:http://www.pythonregex.com/
更多例子:
它应匹配:
BR0227-3
BR0227 3
BR0227_3
分组(BR0227) (3)
它应该只匹配(BR0227)
BR0227-3G1
BR0227-CS
BR0227
BR0227-
答案 0 :(得分:1)
由于您希望组中单词的开头和(可能)结束,请执行以下操作:
r'\b([A-Z0-9]+)(?:[ _-](\d+))?\b'
这将把单词的第一部分放在第一组中,并且可选地将剩余部分放在第二组中。如果不匹配,第二组将为None
。
答案 1 :(得分:1)
我会用
re.findall('^([A-Z]*\s?[0-9]*)[\s_-]*([1-9][1-9]*$)?', str)
每个字符串以第一个组开头,以最后一个组结束,因此^
和$
组可以帮助捕获。最后$
需要捕获所有号码,但它是可选的,因此仍然可以捕获第一组。
答案 2 :(得分:0)
这应该匹配任何后跟' - ',''或'_'的内容,后面只有数字。
(.*)[- _](\d+)