【发布时间】:2019-07-05 15:06:40
【问题描述】:
我的正则表达式有问题。我必须读取包含联系人数据的文件并将其导入数据库。该行具有标准格式,我能够读取所有行,提取联系人姓名、街道/房屋编号、邮政编码和城市。我的问题是门牌号码可以是数字,也可以是“7/9”。
因为我的正则表达式只需要数字,所以第二个替代方案的导入由于斜线而不起作用。另一个问题是当城市名称由两部分组成时,城市也可以有斜线。
String addressPattern = "^"
+ "(?<street>(?:\\p{L}| |\\d|\\.|-)+?) "
+ "(?<number>\\d+(?: ?- \\// ?\\d+)? *[a-zA-Z]?) "
+ "(?<zip>\\d{5}) "
+ "(?<city>(?:\\p{L}| |-)+)"
+ "(?: *\\((?<suffix>[^\\)]+)\\))?" + "$";
正则表达式:^(?<street>(?:\p{L}| |\d|\.|-)+?) (?<number>\d+(?: ?- ?\d+)? *[a-zA-Z]?) (?<zip>\d{5}) (?<city>(?:\p{L}| |-)+)(?: *\((?<suffix>[^\)]+)\))?$
这里是地址部分。
First Street 32 78224 firstCitySecond Street 7/9 73430 secondCityThird Street 32 78224 third/CityFourth Street 9/7 73430 fourth/city
第一个和第三个例子都可以。我可以读取数据。但是第二个和第四个返回空字符串。
有人可以帮助我吗?
【问题讨论】:
-
你能分享所有4(或5)部分的规格吗?
-
正则表达式是否适合您的任务?地址可能包含诸如
Harlow House或Suite 1234之类的附录,街道编号可能带有诸如69a之类的后缀,可能根本没有街道名称(例如12 99999 Backwater);在德国曼海姆市,市中心没有街道名称,但街区由一种坐标代码引用(例如Q3 12345 city。好吧,这太极端了......)。这些“常见”格式的异常值会破坏你的代码,但除非你有很好的测试覆盖率,否则很难事先发现(更不用说支持它们会不成比例地破坏你的正则表达式)
标签: java regex regex-group