我有以下文本a=“增值税号码12345678901手机号码34567890234”我只想找到由11个数字(即12345678901)组成的增值税号码对应的号码,我不想找到34567890234。
我使用的正则表达式是:
rgx = "(?<!\d)\d{11}(?!\d)"但是re.findall(rg, a)给了我34567890234和12345678901。有什么想法吗?
发布于 2021-12-01 15:25:38
在精确的字符串a="VAT number 12345678901 mobile number 34567890234"中,这将查找11位数字,后跟空格和单词mobile,但只返回数字。rgx = "\d{11}(?=\smobile)"
有很多浏览器驱动的正则表达式创建器,它们是很好的学习资源。
你的原始表达式使用了负面环视表达式(?<\d)和(?!\d),它们并不是在所有方面都受支持,所以我倾向于避免使用它们。此外,就语言结构而言,检测某物的存在通常比检测某物的不存在更精确。例如,如果有人问你想喝什么,你回答“不是毒药”,但你想要汽水;你不太可能得到汽水。
因此,正向环视表达式将更加健壮,(?=abc)和(?<abc)
发布于 2021-12-01 19:51:44
尝尝这个
(?:VAT\s*number\s*)(\d{11})\s+这不是捕获块:(?:VAT\s*number\s*)确保在之后搜索号码。
此代码块:仅当增值税编号由11位数字组成时,(\d{11})\s+才会捕获它。
https://stackoverflow.com/questions/70186711
复制相似问题