小括号在正则中有不同的含义
一种是指括号内的表达式作为一个整体,也就是你使用的这种,把 ,\d{3}
作为整体使用 *
匹配多个
还有一种含义是捕获数据,也就是将括号内表达式匹配到的数据提取出来保存供内部反向引用或者外部提取,你这个表达式也用到了这种含义
还有其他含义感兴趣可以看看
我想到的你现在有两种解决方式
- 修改正则,改为下面这种,
?:
意思是不捕获括号内匹配到的数据
^\d{1,3}(?:,\d{3})*$
- 修改使用的函数
findall
返回的是匹配的子串列表,你的小括号有捕获的含义,所以它返回了符合条件的(,\d{3})
部分match
返回的是Match对象,不匹配返回None,使用group()
或者group(0)
函数可以提取符合正则的整个字符串,groups()
函数提取捕获子串(和findall
函数返回值类似了,只是这边是元祖) ()需要注意match
函数本身就是从首字母开始匹配的,所以正则中加不加^
意思都是一样的
result = threeNumRegex.match(text)
print(result.group())