Python 3-请帮助我修改此正则表达式

时间:2019-01-23 10:16:55

标签: python regex python-3.x

我正在研究Python编码书,任务是:

输入:“ 42 1,234 6,368,745 12,34,567 1234” 使正则表达式匹配42 1,234 6,368,745但不匹配12,34,567 1234 因此,基本上只应将逗号与\ d {1,3}的普通数匹配,然后在逗号之间仅将\ d {3}匹配。我创建了:

r'^\d{1,3}(,\d{3})*$'

当我分割字符串,遍历每个数字并使用re.search时起作用。 但是,当我想遍历整个字符串并使用re.findall时,我需要完全将正则表达式重新创建为

r'(((\s|^)\d{1,3}(?!\d|,)|(\s|^)\d{1,3},(\d{3},|\d{3}(?!,))+))'

因为它还需要处理空格。但是在这种情况下,findall是否有更好和更短的正则表达式?因为看起来糟透了... 对不起,我的英语://如果需要我问什么。

findall的代码:

text ="42 1,234 6,368,745 12,34,567 1234"
regex = re.compile(r'(((\s|^)\d{1,3}(?!\d|,)|(\s|^)\d{1,3},(\d{3},|\d{3}(?!,))+))')
found = ""
finden = regex.findall(text)
print(finden)

搜索代码:

text ="42 1,234 6,368,745 12,34,567 1234"
text = text.split(" ")
regex = re.compile(r'^\d{1,3}(,\d{3})*$')
found = ""
for value in text:
    print(value)
    find = regex.search(str(value))
    if find is None:
        continue
    found = found + find.group() + "; "
print(found)

0 个答案:

没有答案