gpt4 book ai didi

java - 正则表达式将整个字符串放入第 1 组

转载 作者:行者123 更新时间:2023-11-30 10:49:37 24 4
gpt4 key购买 nike

尝试在 Java 中执行正则表达式以将地址拆分为数据库表中的两列。我要匹配的字符串是:

102 Main St. BLDG 105

第 1 组应该持有 102 Main St.

第 2 组应持有 BLDG 105

第 3 组并不是真的需要,只是不知道该怎么做。

使用下面的所有内容都放在组 1 中

(.+)(\s(APT|LOT|BLDG|UNIT|TRLR|SUITE|STE)*)

我使用 java 中的组来设置属性。

=====编辑======

感谢@WiktorStribiżew 的所有帮助,它让我非常接近我正在尝试做的事情。

我现在使用的正则表达式是:

(.+)\s((?:APT|LOT|BLDG|UNIT|TRLR|SUITE|STE).*)

第 1 组并不懒惰,我需要它来处理标记在字符串中出现两次的奇数实例。

我也不确定单词边界在做什么,并在我最近的代码中将其删除。

这是我的测试用例

123 作为圣 STE 5

120 LOT St LOT A100 <-- 为什么第 1 组不懒惰。

120 N. LOT St <-- 这种情况失败 <-- 第 1 组:120 N。组:2 LOT St

100 LOT St LOT# as8080

123 LOT St <-- 这对于我在代码中的条件是没问题的,但会以其他方式拆分。

125 MERLOT Dr. LOT A800

最佳答案

您可以将以下正则表达式与 String#matches 一起使用:

String p = "(.+?)\\s*(\\b(?:APT|LOT|BLDG|UNIT|TRLR|SUITE|STE)\\s+\\d+).*";

参见 regex demo

(?:...) 是一个非捕获组,因此,它没有特殊的组。惰性匹配 (.+?) 将匹配第一个空格之前的所有文本并将其捕获到第 1 组中,然后是您的替代项。然后,第 2 组将持有备选方案之一 + 空格 + 数字。

更新

这是满足要求的正则表达式版本:1) 组 1 不是惰性的(这意味着,matcher.group(1) 结果应该从空格中删除),2) word边界确保我们不早于“LOTTERY”匹配:

^(.+)\s*(\b(?:APT|LOT|BLDG|UNIT|TRLR|SUITE|STE)\b.*)$

参见 another demo

关于java - 正则表达式将整个字符串放入第 1 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35343082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com