我知道邮政地址上的正则表达式不是最优的,但我真的在这里。
我解释了我的问题:我有不同类型的邮政地址:
32 Rue Jean Jaures 69000 Lyon
Bâtiment 1 32 Rue Jean Jaures 69000 Lyon
32 B Jean Jaures 69000 Lyon
Bâtiment 1 32 B Rue Jean Jaures 69000 Lyon
我需要一个正则表达式才能找到任何位置的街道号码。
我做了一个正则表达式,允许确定数字是否在字符串的开头:
`^([1-9][0-9]{0,2}(?:\s*[A-Z])?)\b`
您可以在此处查看结果:https://regex101.com/r/dY7cE6/3
但问题是,如果它不是我的第一个字符串就不能找到它(比如这个地址:Bâtiment 1 32 Rue Jean Jaures 69000 Lyon)
所以我请你帮忙在任何情况下找到这条街的号码,这是“32”。
我一直在寻找自己的搜索,但是会有所帮助。
谢谢。
答案 0 :(得分:1)
以下正则表达式将在字符串中找到倒数第二个数字(在捕获组中)。如果在这个数字后面有一个字母(用空格分隔),它也会捕获这个。
它要求字符串中的最后一个数字是五位数的邮政编码:
/(\d+(?:\s*\w\b)?)[^\d]+\d{5}[^\d]+$/
但是,您需要多么可靠地识别门牌号码?输入数据的可能范围是多少?没有正则表达式方法可能非常好。 This question and answers对问题有所了解。
答案 1 :(得分:1)
字符串中的最后一个数字,除非它是5位数,可选择在数字后面捕获一个字母:
^.*\b(?!\d{5}[A-Z]?\b)(\d+(?:\s*[A-Z]\b)?)
答案 2 :(得分:1)