Python 正则表达式仅在数字时匹配

0 投票
3 回答
7235 浏览
提问于 2025-04-17 17:29

给定下面的正则表达式和单词,我想要匹配在 - (也可以是 _ 或空格)之后的部分,但前提是这个分隔符后面必须是数字,并且后面不能有其他字符(也就是说,我只想要数字)。我在使用分组语句,但似乎总是出错。它总是匹配开头的 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-

3 个回答

0

这段话的意思是,它会匹配任何后面跟着'-'、' '(空格)或者'_'的内容,并且在这些符号后面只能是数字。

(.*)[- _](\d+)
1

因为你想把单词的开始部分和(可能的)结束部分放在不同的组里,所以可以这样做:

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

这样做会把单词的第一部分放在第一组,如果有剩下的部分,它会放在第二组。如果没有匹配到剩下的部分,第二组会是None

2

我会使用

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

每个字符串都是从第一个部分开始,到最后一个部分结束的,所以 ^$ 这两个符号可以帮助我们抓取内容。结尾的 $ 表示需要抓取 所有 的数字,但这个是可选的,所以第一个部分还是可以被抓取到。

撰写回答