正则表达式替换问题理解
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
我正在尝试为无效的 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