正则表达式替换问题理解

Regex Replacing issue understanding

我正在尝试为无效的 phone 号码编写一个替换逻辑,我提供了一个地图 我通读了一些正则表达式线程,但我不知道这是否真的可行。

示例:

输入phone号码:+410712345678

我正在尝试使用的正则表达式:

 "^\+(?:[0-9] ?){6,14}[0-9]$" 

正则表达式和过滤后的数字应为:+41712345678。所以实际上删除了 0.

的第一个实例

第二个例子:

输入phone号码:+41(071)2345678

我正在尝试使用的正则表达式:

"^\+(?:[0-9] ?)\({0,3}\){3,11}[0-9]$"

正则表达式和过滤后的数字应为:+41712345678。所以实际上删除了 0 的第一个实例以及大括号。

我正在尝试使用某种模式自动从那些 phone 数字中删除那些无效部分。这些数字需要以这种方式格式化才能与我的 VOIP 应用程序一起使用。

有没有什么方法可以用正则表达式来创建过滤模式?

似乎您应该只将该规则应用于瑞士 phone 号码,即 +41 号码,因为简单地从任何国际号码中删除第一个 0 是错误的。

所以,ph = ph.replaceFirst("^(\+41)\(?0?([0-9]{2})\)?", "")

请参阅 regex101 了解其工作原理。

感谢您的回答。

我使用以下代码将 Regex 应用于我的 TestImport:

 //...

log.debug("Applying Regex :" + SearchString + " with Replace: " + ReplaceString);   

log.debug("Applying Regex for Number:" + Person.get(EPerson.Rufnummer));
Person.put(EPerson.Rufnummer, Person.get(EPerson.Rufnummer).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.Rufnummer));

log.debug("Applying Regex for Number:" + Person.get(EPerson.RufnummerMobil));
Person.put(EPerson.RufnummerMobil, Person.get(EPerson.RufnummerMobil).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.RufnummerMobil));
    //...

DEBUG [AddressbookFactory] ​​将 Numberfilter 应用于:{Vorname=Testinator, Nachname=Test, Rufnummer=+410717271818, RufnummerMobil=, RufnummerPrivat=+41(071)7271818, Fax=, Strasse=, PLZ=, Stadt= , Bundesland=, Email=, Firma=, URL=}

DEBUG [AddressbookFactory] ​​检测到正则表达式

调试 [AddressbookFactory] ​​应用正则表达式 :^(+41)(?0?([0-9]{2}))?替换为:$1$2

DEBUG [AddressbookFactory] ​​对号码应用正则表达式:+410717271818

DEBUG [AddressbookFactory] ​​新号码为:+41717271818

DEBUG [AddressbookFactory] ​​对号码应用正则表达式:+41(071)7271818

DEBUG [AddressbookFactory] ​​新号码是:+41717271818 ...

成功了!

非常感谢您的快速回复!

我将您的回答标记为有用,但根据我的 "newbie" 声誉,它并没有表明它。

此问题已解决。

此致Fabian95qw