0

鉴于正则表达式和下面的单词,我想匹配 - 之后的部分(也可以是 _ 或空格),前提是分隔符之后的部分是数字并且后面没有任何内容(我基本上想成为一个数字和数字)。我正在使用组语句,但它似乎无法正常工作。它一直与开头的 3 匹配(如果我稍微修改一下,则匹配结尾的 1)。我如何实现这一点(通过使用分组)?

目标词: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-
4

3 回答 3

2

我会用

re.findall('^([A-Z]*\s?[0-9]*)[\s_-]*([1-9][1-9]*$)?', str)

每个字符串都从第一组开始,到最后一组结束,因此^$组可以帮助捕获。最后$的 要求捕获所有数字,但它是可选的,因此仍然可以捕获第一组。

于 2013-02-28T19:52:49.673 回答
1

由于您希望分组单词的开头和(可能)结尾,请执行以下操作:

r'\b([A-Z0-9]+)(?:[ _-](\d+))?\b'

这会将单词的第一部分放在第一组中,并且可选地将其余部分放在第二组中。第二组将是None如果它不匹配。

于 2013-02-28T19:43:21.497 回答
0

这应该匹配后跟“-”、“”或“_”的任何内容,后面只有数字。

(.*)[- _](\d+)
于 2013-02-28T19:50:12.970 回答