我必须使用Regex电话号码进行清理。 有时我得到的电话号码从0开始,在这种情况下我不想保留链的其余部分:
对于我希望的国际号码:
但我的问题是,表达式不应该更改任何正确的国际号码(从00开始)
始终有效的规则是: 如果字符串以1或3'0'开头,则删除第一个'0',否则保持字符串不变。
答案 0 :(得分:2)
使用^0(?!0)
作为模式。
Python示例:
>>> re.sub(r'^(?!00[^0])0', '', '0666777888')
'666777888'
>>> re.sub(r'^(?!00[^0])0', '', '00034666777888')
'0034666777888'
>>> re.sub(r'^(?!00[^0])0', '', '0034666777888')
'0034666777888'
使用Javascript:
> '0666777888'.replace(/^(?!00[^0])0/, '')
'666777888'
> '00034666777888'.replace(/^(?!00[^0])0/, '')
'0034666777888'
> '0034666777888'.replace(/^(?!00[^0])0/, '')
'0034666777888'
答案 1 :(得分:2)
如果您使用的语言支持负前瞻,则可以使用此正则表达式:
^(?!00[1-9])0
并且一无所获。
根据评论,要删除引号(如果存在),您可以使用:
^"?(?:(?!00[1-9])0([0-9]+)|(00[0-9]+))"?$
并替换为$1$2
。 (或\1\2
取决于语言/引擎)
^ // Matches beginning of line
"? // Matches opening double quotes if present
(?: // Begin of non-capture group
(?!00[1-9] // Prevents the match of two zeroes followed by a digit other than zero
0 // Matches 0
([0-9]+) // Matches all the digits after 0 and store in first capture group
| // Or...
(00[0-9]+) // Two zeroes followed by any number of digits in second capture group
) // End of non-capture group
"? // Matches closing double quotes if present
$ // Matches end of line
答案 2 :(得分:1)
Java版:
System.out.println("034666777888".replaceAll("^0(?!0[1-9]+)([0-9]*)","$1"));
System.out.println("00034666777888".replaceAll("^0(?!0[1-9]+)([0-9]*)","$1"));
System.out.println("0034666777888".replaceAll("^0(?!0[1-9]+)([0-9]*)","$1"));
输出:
34666777888
0034666777888
0034666777888
答案 3 :(得分:1)
我认为这个正则表达式可以帮助你:
(?=0*)(00)*([1-9][\d]*)
将匹配替换为:\ 1 \ 2