有条件地在逗号分隔字符串中为标记添加前缀

时间:2014-07-23 23:24:59

标签: c# regex preg-replace

示例91是印度的ISD代码,下面是逗号分隔的手机号码列表

9111111111,1111111112,1111111113,911111111114,911111111115

如果不存在,91为电话号码添加前缀的最佳方式是什么?以下是预期产出

919111111111,911111111112,911111111113,911111111114,911111111115

我们总是可以拆分并循环检查和替换值,然后将它们连接起来。 还有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

替换位置(零宽度)匹配

使用此:

resultString = Regex.Replace(yourString, @"(?=\b(?!91\d{10})\d{10}\b)", "91");

the regex demo 中,请参阅底部的替换。

<强>解释

正则表达式(?=\b(?!91\d{10})\d{10}\b)匹配我们应插入91的位置,而不匹配任何字符。我们将该位置匹配替换为91

前瞻(?=\b(?!91\d{10})\d{10}\b)断言接下来是

  • \b一个单词边界(确保我们在中间字符串不匹配)
  • (?!91\d{10})后面没有91和十位数(负面lookehead)和
  • \d{10}十位数字

<强>参考

答案 1 :(得分:2)

由于您已对此进行了标记,因此这是正则表达方式;

\b(\d{10})\b替换为91$1

这将匹配并捕获一系列10位数字。 91$1替换字符串将以91为前缀。

答案 2 :(得分:2)

这取决于你如何更好地定义,但你总是可以使用linq:

var numbers = input.Split(',').Select(x => x.StartsWith("91") ? x : "91" + x);

var result = string.Join(",", numbers);