我正在编写一个程序,该程序必须将电话号码分开,每个部分都用连字符(或空格,或'()'或空)分隔。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})\)?
在开始字符串时匹配0x
,0xx
,(0xx)
和(0x)
作为括号的
[- ]?
仅可用于第一组,剩下的唯一有效分隔符是空格和连字符。 ?
表示0或1次。(\d{4,5})
将与第二组匹配。由于第三组的长度是固定的(4位数字),因此正则表达式将自动计算Group1和2的长度。(\d{4})$
匹配数字末尾的4位数字。See it in action
您可以从捕获组1,2和3中提取数据
注意:如OP的注释中所述,这仅从格式正确的数字中提取数据。它将匹配一些格式错误的数字。