首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >regex组不适用于多个地址

regex组不适用于多个地址
EN

Stack Overflow用户
提问于 2019-07-05 15:06:40
回答 2查看 56关注 0票数 1

我对我的行刑有意见。我必须读取带有联系人数据的文件并将其导入数据库。这条线有一个标准的格式,我能够阅读所有的线条,提取联系人名称,街道/千人,拉链和城市。我的问题是,这个数字可以是一个数字,也可以是这个“7/9”。

因为我的regex只期望编号,所以第二个选项的导入不会产生斜杠。另一个问题是,当城市的名称由两个部分组成时,城市也可以有一个斜线。

代码语言:javascript
运行
复制
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>[^\)]+)\))?$

这是地址部分。

  1. First Street 32 78224 firstCity
  2. Second Street 7/9 73430 secondCity
  3. Third Street 32 78224 third/City
  4. Fourth Street 9/7 73430 fourth/city

第一个和第三个例子是可以的。我能读到数据。但是第二个和第四个返回空字符串。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2019-07-05 15:15:43

我会看到一个更简单的正则表达式:^(?<street>\D*)\s(?<number>[\d\/]+)\s(?<zip>\d{5})\s(?<city>.*)$

  • street指的是数字以外的任何东西
  • number是数字/斜杠
  • zip是5位数
  • 剩下的是city

这与您的4个字符串非常匹配:regex演示

票数 0
EN

Stack Overflow用户

发布于 2019-07-05 15:19:55

您可以使用可选组:

代码语言:javascript
运行
复制
^(?<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+乘以列表中的任何一个

代码语言:javascript
运行
复制
- `)*` Close non capturing group and repeat 0+ times

  • )\h+关闭街道组,匹配1+水平空格图
  • (?<number>
    • \d+(?:/\d+)?将1+数字与可选的/数字部分匹配。

  • )\h+关闭数字组,匹配1+水平空格字符
  • (?<zip>
    • \d{5}匹配5位数字

  • )\h+关闭压缩组,匹配1+水平空格字符
  • `(?\pL+)匹配城市
  • (?<suffix>/\pL+)?匹配可选后缀
  • 字符串的$末端

Regex演示 x- Java演示

在Java中

代码语言:javascript
运行
复制
String regex = "^(?<street>[\\pL\\pN.]+(?:\\h+[\\pL\\pN.]+)*)\\h+(?<number>\\d+(?:/\\d+)?)\\h+(?<zip>\\d{5})\\h+(?<city>\\pL+)(?<suffix>/\\pL+)?$";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56905537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档