使用正则表达式解析地址
Parsing address with Regex
我希望能够使用正则表达式将一个字符串解析为多个信息字符串。例如,让我们使用一个地址:"My Street 10 90210 Beverly Hills"。我可以由此创建的字符串示例:
My Street
– 街道名称
10
– 门牌号
90210
– 邮政编码
Beverly Hills
– 城市
我一直在尝试为它创建一个模式,但在分析和剖析字符串时我有点迷茫。
有人可以帮助我开始吗?
我会使用 string.split
函数。
String s = "My Street 10 90210 Beverly Hills";
String parts[] = s.split("\s+(?=\d+\s+\d+)|(?<=\d+)\s+(?=[A-Z])|(?<=\d+)\s+(?=\d+)");
System.out.println(Arrays.toString(parts));
输出:
[My Street, 10, 90210, Beverly Hills]
解释:
\s+(?=\d+\s+\d+)
匹配一个或多个 space 仅当其后跟一位或多位数字加一位或多位 space 加一位或多位数字时。这样门牌号前的space就满足这个条件。所以它匹配了。
|
调用了交替运算符。
(?<=\d+)\s+(?=[A-Z])
匹配一个或多个 space ,它们前面有一个或多个数字,然后是一个大写字母。所以字符串 city
之前的 space 将满足此条件并匹配。
(?<=\d+)\s+(?=\d+)
这匹配数字之间的所有 space。所以门牌号和邮政编码之间的 spaces 匹配了。
根据匹配的 space 拆分您的输入将为您提供所需的输出。
我希望能够使用正则表达式将一个字符串解析为多个信息字符串。例如,让我们使用一个地址:"My Street 10 90210 Beverly Hills"。我可以由此创建的字符串示例:
My Street
– 街道名称10
– 门牌号90210
– 邮政编码Beverly Hills
– 城市
我一直在尝试为它创建一个模式,但在分析和剖析字符串时我有点迷茫。
有人可以帮助我开始吗?
我会使用 string.split
函数。
String s = "My Street 10 90210 Beverly Hills";
String parts[] = s.split("\s+(?=\d+\s+\d+)|(?<=\d+)\s+(?=[A-Z])|(?<=\d+)\s+(?=\d+)");
System.out.println(Arrays.toString(parts));
输出:
[My Street, 10, 90210, Beverly Hills]
解释:
\s+(?=\d+\s+\d+)
匹配一个或多个 space 仅当其后跟一位或多位数字加一位或多位 space 加一位或多位数字时。这样门牌号前的space就满足这个条件。所以它匹配了。|
调用了交替运算符。(?<=\d+)\s+(?=[A-Z])
匹配一个或多个 space ,它们前面有一个或多个数字,然后是一个大写字母。所以字符串city
之前的 space 将满足此条件并匹配。(?<=\d+)\s+(?=\d+)
这匹配数字之间的所有 space。所以门牌号和邮政编码之间的 spaces 匹配了。根据匹配的 space 拆分您的输入将为您提供所需的输出。