我有以下文本a="增值税号码12345678901手机号码34567890234";我只想找到由11个数字(即12345678901(组成的增值税号码对应的号码,而不想找到34567890234。
我使用的正则表达式是:
rgx = "(?<!d)d{11}(?!d)"
但CCD_ 1同时给了我CCD_ 2和CCD_。知道吗?
在精确字符串a="VAT number 12345678901 mobile number 34567890234"
中,这将查找11位数字,后面跟着一个空格和单词mobile
,但只返回这些数字。rgx = "d{11}(?=smobile)"
有很多浏览器驱动的正则表达式创建者,他们是很好的学习资源。
您的原始表达式使用否定环视表达式(?<d)
和(?!d)
,它们并非在所有方面都受支持,因此我倾向于避免使用它们。此外,就语言结构而言,检测事物的存在通常比检测事物的不存在更准确。就像有人问你想喝什么,你回答";不是毒药";但是你想要一杯苏打水;你不太可能喝到苏打水。
因此,正向环视表达式将更健壮的(?=abc)
和re.findall(rg, a)
0
试试这个
(?:VATs*numbers*)(d{11})s+
此未捕获块:(?:VATs*numbers*)
确保搜索后的号码。
此块:(d{11})s+
仅当增值税编号由11位数字组成时,才捕获该编号。