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

本文关键字:字符串 添加 加前缀 token 分隔 有条件 | 更新日期: 2023-09-27 18:14:23

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

9111111111, 1111111112, 1111111113, 911111111114, 911111111115

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

919111111111, 911111111112, 911111111113, 911111111114, 911111111115

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

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

替换Position (Zero-Width)匹配

使用

:

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

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

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

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

  • 'b一个字边界(确保我们在中间字符串不匹配)
  • (?!91'd{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作为前缀。