我想从16位数字替换,它是第5到第10位。
如何使用正则表达式(C#)实现?
答案 0 :(得分:2)
为什么要使用正则表达式?如果通过" 16位数",你的意思是一个数字的16个字符长的字符串表示,那么你最好只使用子字符串。
string input = "0000567890000000";
var output = input.Substring(0, 4) + "222222" + input.Substring(10, 6);
或者你的意思是你想换掉第5和第10位?你的问题不是很清楚。
答案 1 :(得分:2)
这样做的方法是分别捕捉内部和外部部分,如下所示:
// Split into 2 groups of 5 digits and 1 of 6
string regex = "(\\d{5})(\\d{5})(\\d{6})";
// Insert ABCDEF in the middle of
// match 1 and match 3
string replaceRegex = "${1}ABCDE${3}";
string testString = "1234567890999999";
string result = Regex.Replace(testString, regex, replaceRegex);
// result = '12345ABCDE999999'
答案 2 :(得分:0)
使用正则表达式(?<=^\d{4})\d{6}(?=\d{6}$)
来实现它而不使用捕获组。
它查找6个连续数字(包括第5到第10个),前面是字符串的前4位数字和最后6位数字。
Regex.Replace("1234567890123456", @"(?<=^\d{4})\d{6}(?=\d{6}$)", "replacement");
答案 3 :(得分:0)
得到了...... 通过创建3个捕获组:
([\d]{5})([\d]{5})([\d]{6})
继续捕捉group1和3并用星星(或其他)替换group2
$1*****$3
下面的C#代码
string resultString = null;
try {
resultString = Regex.Replace(subjectString, @"([\d]{5})([\d]{5})([\d]{6})", "$1*****$2", RegexOptions.Singleline);
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}