gpt4 book ai didi

java - 将字符串末尾的电话号码与 `regex` 匹配,并返回两个部分

转载 作者:行者123 更新时间:2023-12-02 03:29:48 25 4
gpt4 key购买 nike

我有一堆像下面这样的行:

Name1 Surname1         +44 (020) 1234 5678 
Name2 Name2 Surname2 +39 (051) 12.34.56
Surname3, Name3 - (555) 123-456-789
Surname4, Name4 Name4 123 - 456.78.90

我想识别并返回名称及其包含的数字。例如,我想返回:

  1. 姓名1 姓氏1 +44 (020) 1234 5678
    • 姓名:姓名1 姓氏1
    • 号码:+44 (020) 1234 5678
  2. 姓名2 姓名2 姓氏2 +39 (051) 12.34.56
    • 姓名:姓名2 姓名2 姓氏2
    • 号码:+39 (051) 12.34.56
  3. 姓氏 3、姓名 3 - (555) 123-456-789
    • 姓名:姓氏 3、姓名 3 -
    • 号码:(555) 123-456-789
  4. 姓氏 4、姓名 4 姓名 4 123 - 456.78.90
    • 姓名:姓氏 4、姓名 4 姓名 4
    • 号码:123 - 456.78.90

我正在使用Java 正则表达式,到目前为止,我得出了以下模式:

\A(.*)\s+(\+?\s*\d+([.-\s]*(\d+|\(\d+\)))+)\z

如果line是以上任何一行,则匹配模式的代码是:

Pattern pattern = Pattern.compile("^(.*)\\s+(\\+?\\s*\\d+([.-\\s]*(\\d+|\\(\\d+\\)))+)$");
Matcher matcher = pattern.match(line);
if (matcher.find()) {
System.out.println("Name: " + pattern.group(1));
System.out.println("Number: " + pattern.group(2));
}

不幸的是,在任何(例如Name1 Surname1 +44 (020) 1234 5678)上,它都会返回以下内容:

Name: Name1 Surname1         +44 (020) 1234
Number: 5678

我认为这个结果的原因是正则表达式太贪婪,但我不明白如何修改它的行为。

任何人都可以纠正该模式并用简单的语言向我解释解决方案吗?我读了一些教程但不明白该怎么做。提前致谢!

最佳答案

我现在能想到的最简单的是

^(.*?)\s*((?:\+|\()[-\d(). ]*)

它捕获直到+(之前的空格。然后它捕获之后的所有内容(数字、连字符、括号、点或空格)到第二组。

Check it out here at regex101 .

关于java - 将字符串末尾的电话号码与 `regex` 匹配,并返回两个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268078/

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