我正在研究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)