正则表达式取代问题理解

时间:2016-07-07 14:14:43

标签: java regex matcher

我正在尝试为无效的电话号码编写替换逻辑,我提供了一个Map 我读了几个Regex表达式线程,但我不知道这是否真的可行。

示例:

输入电话号码:+410712345678

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

 "^\\+(?:[0-9] ?){6,14}[0-9]$" 
正则表达式和过滤后的

数字应为:+41712345678。所以实际上删除了第一个0的实例。

第二个例子:

输入电话号码:+41(071)2345678

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

"^\\+(?:[0-9] ?)\\({0,3}\\){3,11}[0-9]$"
正则表达式和过滤后的

数字应为:+41712345678。所以实际上删除了0的第一个实例以及大括号。

我正在尝试使用某种模式自动从这些电话号码中删除这些无效的片段。这些数字需要格式化,以便与我的VOIP应用程序一起使用。

有没有办法用regex创建过滤模式?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

感谢您的回答。

我使用以下代码将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]检测到正则表达式

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

DEBUG [AddressbookFactory]将正则表达式应用于数字:+410717271818

DEBUG [AddressbookFactory]新号码是:+41717271818

DEBUG [AddressbookFactory]将正则表达式应用于数字:+41(071)7271818

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

它有效!

非常感谢您的快速回复!

我将你的答案标记为有用,但通过我的“新手”声明它并没有表明它。

此问题已得到解决。

真诚的Fabian95qw