C# 对匹配失败的组进行“自动”更正
我有这样一个正则表达式:C# 对匹配失败的组进行“自动”更正,c#,regex,C#,Regex,我有这样一个正则表达式: ([A-Z]{2})([0-9]*)([A-Z]{1}) M**1**0133776311I 通过这个,我将验证如下代码: MD0133776311I 所以,当我得到错误的代码时,我想知道根据一些简单的规则自动进行更正的最佳方法,这些规则取决于匹配的组 例如,如果我有这样的代码: ([A-Z]{2})([0-9]*)([A-Z]{1}) M**1**0133776311I regexp失败,因为前两个字符不是文本第一匹配组,因此程序应该对第二个字符串字符应用更
([A-Z]{2})([0-9]*)([A-Z]{1})
M**1**0133776311I
通过这个,我将验证如下代码:
MD0133776311I
所以,当我得到错误的代码时,我想知道根据一些简单的规则自动进行更正的最佳方法,这些规则取决于匹配的组
例如,如果我有这样的代码:
([A-Z]{2})([0-9]*)([A-Z]{1})
M**1**0133776311I
regexp失败,因为前两个字符不是文本第一匹配组,因此程序应该对第二个字符串字符应用更改,将1替换为,例如,I
要做到这一点,最好的方法是利用正则表达式?如果给定代码不是以两个字母开头,可以使用替换映射替换索引1处的字符:
using System;
using System.Text;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Test
{
private static string[] productCodes = new[] {
"MD0133776311I",
"M10133776311I",
"M20133776311I"
};
private static Dictionary<char, char> replacementMap = new Dictionary<char, char> {
{ '1', 'I' },
{ '2', 'S' },
};
private static Regex startsWithTwoLettersRegex = new Regex("^([A-Z]{2})");
public static void Main()
{
foreach (var code in productCodes)
{
Console.Write("{0} -> ", code);
if (!startsWithTwoLettersRegex.Match(code).Success)
{
Console.WriteLine(FixProductCode(code));
}
else
{
Console.WriteLine("OK!");
}
}
}
static string FixProductCode(string code)
{
StringBuilder sb = new StringBuilder(code);
sb[1] = replacementMap[code[1]];
return sb.ToString();
}
}
看
我相信你可以把它塑造成更灵活的东西,但正如我在评论中所说的,正则表达式无法猜出你的意思。您需要在代码中明确显示,并手动将字符固定在字符串中的设置位置
注意,如果第一个字符不是字母,那么它不会修复第一个字符,也不会检查代码的其余部分 正则表达式猜不出你的意思您需要确定并编写要应用的规则。你总是想用大写字母i替换第二个字符吗?例如,如果第二个数字是1,我总是想用i替换。我有匹配规则,比如两个字面值,然后是一些数字,最后一个字面值,根据其他简单规则,我必须更改一些字符,使代码与初始regexp一致。是的,但这只是一个示例。你可以用Regex.Replace^[A-Z]{1}[1]这样的东西来做,如果它是一个2怎么办?如果是2,例如s。请阅读我对前面评论的编辑;那么,阅读我之前的评论,您需要编写这些规则。代码不能与示例一起使用,您需要明确。