Python正则表达式只匹配数字

时间:2013-02-28 19:40:01

标签: python regex

鉴于正则表达式和下面的单词,我想匹配 - (也可以是_或空格)之后的部分,只有当分隔符后面的部分是数字而后面没有任何内容时(我基本上想要只是一个数字和数字)。我正在使用组语句,但它似乎不正常。它在开头时保持匹配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-

3 个答案:

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