我正在编写一个程序,该程序必须将电话号码分开,每个部分都用连字符(或空格,或'()'或空)分隔。

Exp: Input: 0xx-xxxx-xxxx or 0xxxxxxxxxx or (0xx)xxxx-xxxx Output: code 1: 0xx code 2: xxxx code 3: xxxx
但是我的问题是:有时“代码1”仅为0x->因此“代码2”必须为xxxxx(第1部分的长度为2位数时始终带有连字符或括号)

任何人都可以帮助我,将不胜感激。

最佳答案

根据您的评论,以下正则表达式将提取您所需的信息

^\(?(0\d{1,2})\)?[- ]?(\d{4,5})[- ]?(\d{4})$


分解:


^\(?(0\d{1,2})\)?在开始字符串时匹配0x0xx(0xx)(0x)
作为括号的[- ]?仅可用于第一组,剩下的唯一有效分隔符是空格和连字符。 ?表示0或1次。
(\d{4,5})将与第二组匹配。由于第三组的长度是固定的(4位数字),因此正则表达式将自动计算Group1和2的长度。
(\d{4})$匹配数字末尾的4位数字。


See it in action

您可以从捕获组1,2和3中提取数据

注意:如OP的注释中所述,这仅从格式正确的数字中提取数据。它将匹配一些格式错误的数字。

09-16 19:50