如何匹配1234567格式的数字

2024-05-14 13:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助找到一个正则表达式规则,它应该搜索一个大字符串/文本,并匹配格式为:12345678或1234567或12345或1234的数字。你知道吗

例如: 对于12345678,它应该匹配12345678,而不是345678或45678或任何类似的

我看了看:Regex help needed to match numbers 但答案要么与1,23456中的1匹配(根本不应该匹配,因为1,23456不是数字),要么与12,23456中的23456匹配(根本不应该匹配)

在创建一个regex规则来匹配正确的格式编号时,我首先尝试创建它不应该匹配的规则(即not1,23456),然后尝试创建它应该匹配的规则。我创建的最后一条规则在大多数情况下都匹配,但不是所有情况下都匹配。你知道吗

number_regex1 = re.compile(r'''     # should not, but matches 12,233,57 = 12,233             
                          ((\d\d(?=[\s.,]\d\d\d))((?<=\d\d)[\s.,]\d\d\d)([\s.,]\d\d\d)+)| # matches 12,345,678
                          ((\d(?=[\s.,]\d\d\d))((?<=\d)([\s.,]\d\d\d))([\s.,]\d\d\d)+)| # matches 1,234,567
                          (((?<!\d[\s.,])(?<!\d)(?<!\d\d[\s.,])(?<!\d\d\d[\s.,])\d\d(?=[\s.,]\d\d\d))((?<=\d\d)[\s.,]\d\d\d))| # matches 12,345
                          (((?<!\d[\s.,])(?<!\d)(?<!\d\d[\s.,])(?<!\d\d\d[\s.,])\d(?![\s.,]\d\d)(?=[\s.,]\d\d\d))((?<=\d)[\s.,]\d\d\d))| # matches 1,234''', re.VERBOSE)

我想要的时候

mo = number_regex1.search('12,345,67') 

没有匹配,因为12345,67不是数字


Tags: to字符串文本renumber规则格式match
1条回答
网友
1楼 · 发布于 2024-05-14 13:25:42

你应该使用

re.findall(r'(?<!\d,)(?<!\d)\d{1,3}(?:,\d{3})*(?!,?\d)', text)

请参见regex demo和regex图:

enter image description here

细节

  • (?<!\d,)-当前位置的左边不允许有数字和逗号
  • (?<!\d)-当前位置的左边不允许有任何数字
  • \d{1,3}-1到3位数字
  • (?:,\d{3})*-0或更多,和3位数序列的重复
  • (?!,?\d)-没有可选的,,然后立即在当前位置的右侧允许一个数字。你知道吗

注意两个lookbehind是必需的-(?<!\d,)(?<!\d),因为lookbehind必须是固定宽度((?<!\d,|\d)不起作用)。你知道吗

相关问题 更多 >

    热门问题