有条件地给以逗号分隔的字符串中的token添加前缀



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

9111111111, 1111111112, 1111111113, 911111111114, 911111111115

如果电话号码没有前缀91,最好的方法是什么?以下是预期输出

919111111111, 911111111112, 911111111113, 911111111114, 911111111115

总是可以通过检查和替换值来分割和循环,然后再连接它们。有没有更好的办法?

替换Position (Zero-Width)匹配

使用

:

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

中的regex演示中,请参见底部的替换。

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

前瞻(?=b(?!91d{10})d{10}b)断言后面是

  • b一个字边界(确保我们在中间字符串不匹配)
  • (?!91d{10})后面不跟91和十位数字(负抬头)和
  • d{10}十位
参考

  • 零长度断言的前向和后向
  • 掌握向前看和向后看

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

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

既然你已经标记了这个正则表达式,这里是正则表达式的方式;

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

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

最新更新