我需要帮助找到一个正则表达式规则,它应该搜索一个大字符串/文本,并匹配格式为: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不是数字
你应该使用
请参见regex demo和regex图:
细节
(?<!\d,)
-当前位置的左边不允许有数字和逗号(?<!\d)
-当前位置的左边不允许有任何数字\d{1,3}
-1到3位数字(?:,\d{3})*
-0或更多,
和3位数序列的重复(?!,?\d)
-没有可选的,
,然后立即在当前位置的右侧允许一个数字。你知道吗注意两个lookbehind是必需的-
(?<!\d,)(?<!\d)
,因为lookbehind必须是固定宽度((?<!\d,|\d)
不起作用)。你知道吗相关问题 更多 >
编程相关推荐