如何写一个正则表达式,匹配每3位数1个逗号的数字
本帖最后由 duke0522 于 2020-9-21 10:51 编辑如果只是匹配‘42’,‘4,123’而不匹配‘12,34,567’,‘1234’。正则表达式为(r'^\d{1,3}(,\d{3})*$'),可以很好的匹配。
但是,如果从一篇很长的文章中提取这样的数字呢?比如'42sdf1,234ds6,368,745ds12,34,567sdfs1234'这样的字符串中,匹配正确的数字,我还没有想出很好的办法。
目前的思路是,将'42sdf1,234ds6,368,745ds12,34,567sdfs1234'中所有的含有逗号的数字字符串全部提取出来,形成一个列表,然后对列表中的项采用正则表达式(r'^\d{1,3}(,\d{3})*$')进行匹配。
如何提取'42sdf1,234ds6,368,745ds12,34,567sdfs1234'中所有含有逗号的数字字符串,哪位大神可以指导一下?
或者有更好的解决办法? re.findall(r'\d+,[\d,]+','42sdf1,234ds6,368,745ds12,34,567sdfs1234')
是要这个结果吗 挥舞乾坤 发表于 2020-9-21 10:53
是要这个结果吗
不理想,其中的‘42’和‘1234’没有匹配 挥舞乾坤 发表于 2020-9-21 10:53
是要这个结果吗
我好像找到了一个方法,在你的基础上改进一下,re.findall(r'\d+,[\d,]+|\d+','42sdf1,234ds6,368,745ds12,34,567sdfs1234') 挥舞乾坤 发表于 2020-9-21 10:53
是要这个结果吗
写了一个,你看如何
import re
text = '42sdf1,234ds6,368,745ds12,34,567sdfs1234'
matches = []
findNumRegex = re.compile(r'\d+,[\d,]+|\d+')
numberList = findNumRegex.findall(text)
numRegex = re.compile(r'^\d{1,3}(,\d{3})*)
for number in numberList:
mo = numRegex.search(str(number))
try:
matches.append(mo.group())
except:
pass
print(matches)
除此之外,我还有一个问题,r'\d+,[\d,]+'中中括号是什么含义? duke0522 发表于 2020-9-21 15:44
写了一个,你看如何
除此之外,我还有一个问题,r'\d+,[\d,]+'中中括号是什么含义?
re.findall(r'[\d,]+','42sdf1,234ds6,368,745ds12,34,567sdfs1234')
这样就行了,中括号里含义是数字或者逗号 挥舞乾坤 发表于 2020-9-21 17:43
这样就行了,中括号里含义是数字或者逗号
想把你的答案设置为最佳答案,不知道怎么弄了{:5_94:} duke0522 发表于 2020-9-22 14:43
想把你的答案设置为最佳答案,不知道怎么弄了
因为你发的不是提问贴,应该设置不了最佳吧,下次发提问帖就可以了
页:
[1]