我对我的行刑有意见。我必须读取带有联系人数据的文件并将其导入数据库。这条线有一个标准的格式,我能够阅读所有的线条,提取联系人名称,街道/千人,拉链和城市。我的问题是,这个数字可以是一个数字,也可以是这个“7/9”。
因为我的regex只期望编号,所以第二个选项的导入不会产生斜杠。另一个问题是,当城市的名称由两个部分组成时,城市也可以有一个斜线。
String addressPattern = "^"
+ "(?<street>(?:\\p{L}| |\\d|\\.|-)+?) "
+ "(?<number>\\d+(?: ?- \\// ?\\d+)? *[a-zA-Z]?) "
+ "(?<zip>\\d{5}) "
+ "(?<city>(?:\\p{L}| |-)+)"
+ "(?: *\\((?<suffix>[^\\)]+)\\))?" + "$";Regex:^(?<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第一个和第三个例子是可以的。我能读到数据。但是第二个和第四个返回空字符串。
有人能帮我吗?
发布于 2019-07-05 15:15:43
我会看到一个更简单的正则表达式:^(?<street>\D*)\s(?<number>[\d\/]+)\s(?<zip>\d{5})\s(?<city>.*)$
street指的是数字以外的任何东西number是数字/斜杠zip是5位数city这与您的4个字符串非常匹配:regex演示
发布于 2019-07-05 15:19:55
您可以使用可选组:
^(?<street>[\pL\pN.]+(?:\h+[\pL\pN.]+)*)\h+(?<number>\d+(?:/\d+)?)\h+(?<zip>\d{5})\h+(?<city>\pL+)(?<suffix>/\pL+)?$关于模式
^开始(?<street> [\pL\pN.]+匹配1+乘以列表中的任何一个(?:非捕获群\h+[\pL\pN.]+匹配1+乘以列表中的任何一个
- `)*` Close non capturing group and repeat 0+ times
)\h+关闭街道组,匹配1+水平空格图(?<number> \d+(?:/\d+)?将1+数字与可选的/数字部分匹配。
)\h+关闭数字组,匹配1+水平空格字符(?<zip> \d{5}匹配5位数字
)\h+关闭压缩组,匹配1+水平空格字符(?<suffix>/\pL+)?匹配可选后缀$末端在Java中
String regex = "^(?<street>[\\pL\\pN.]+(?:\\h+[\\pL\\pN.]+)*)\\h+(?<number>\\d+(?:/\\d+)?)\\h+(?<zip>\\d{5})\\h+(?<city>\\pL+)(?<suffix>/\\pL+)?$";https://stackoverflow.com/questions/56905537
复制相似问题