如何写一个正则表达式,匹配每3 位就有一个逗号的数字?它必须匹配以下数字:‘42’ ‘1,234’ ‘6,368,745’ 但不会匹配:‘12,34,567’ (逗号之间只有两位数字) ‘1234’ (缺少逗号)
方法一;
numregex20 =re.compile(r'^\d{1,3}(,\d{3})*$') #^和$来锚定开头和结尾
input_values=['42', '1,234', '6,368,745','12,34,567', '1234']
for value in input_values:
if numregex20.search(value) is not None:
print_value=numregex20.search(value).group()
print(print_value)
方法二;
numregex20_2 = re.compile(r'(?<![\d|\,])(?:\d{1,3})(?:\,\d{3})*(?=\s)')
text='42 1,234 6,368,745 12,34,567 1234'
result = numregex20_2.findall(text)
print(result)
方法三; 使用空白边界来匹配正确格式化的千位逗号
numregex20_2 = re.compile(r"(?<!\S)\d{1,3}(?:,\d{3})*(?!\S)")
# (? < ! \S) 空白的边界
# \d{1, 3}
# (?:, \d{3}) * 可选的逗号 3 digits, 0 to many times
# (?! \S) # Whitespace boundary 空白的边界
text = '42 1,234 6,368,745 12,34,567 1234'
result = numregex20_2.findall(text)
print(result)
方法四; 试图匹配不需要的模式
s = '42 1,234 6,368,745 12,34,567 1234'
rgx = re.compile(',[0-9]{1,2},|[0-9]{4,}')
nums = [x for x in s.split() if not rgx.search(x)]
print(nums)