假设我有以下两个表示电话号码的字符串:
我的当前正则表达式和替换如下: Regex:
- 1112223333
- 11122233334
(111) 222-3333
,第二个是带分机号码的电话号码 (111) 222-3333 ext 4
所以我们知道电话号码始终是10位数字,可能是11位。如果是11位,则我想用第二种格式进行格式化。我的当前正则表达式和替换如下: Regex:
(\d{3})(\d{3})(\d{4})(\d?)
Replacement: ($1) $2-$3 ext $4
这样可以工作,但无论第4个捕获组是否存在,我都会添加“ext”,因此我得到:
1112223333
>(111) 222-3333 ext
(应为(111) 222-3333
(没有 "ext" 后缀)11122233334
>(111) 222-3333 ext 4
(正确)
ext $4
?
Regex.Replace
内部使用回调函数。抱歉,但这是正确的答案。 - Wiktor Stribiżew(?<f>\d{3})(?<s>\d{3})(?<t>\d{4})(?<e>\d)?
->(?{e}\($+{f}\) $+{s}-$+{t} ext $+{e}:\($+{f}\) $+{s}-$+{t})
- Wiktor Stribiżewstring txt = Regex.Replace(Regex.Replace(phone, @"(^\d{10})(\d)", "$1 ext $2"), @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
- bobble bubble