我正在尝试使用自定义输入替换捕获的子组。但是,我可以在C#正则表达式中找到合适的方法。 我想替换任何出现的字符' O'或者'我'在数字之间。 因此,如果存在' 123O56'(存在字符O),则应将其转换为' 123056'(字符O转换为零)。
代码在C#中
using System.Text.RegularExpressions;
public string ConvertCharToInt(string address)
{
string input = address;
string checkPattern = @"\d+[OI]\d+";
string patternO = @"\d+(O)\d+";
string patternI = @"\d+(I)\d+";
Regex regxO = new Regex(patternO, RegexOptions.IgnoreCase);
Regex regxI = new Regex(patternI, RegexOptions.IgnoreCase);
if (Regex.IsMatch(input, checkPattern)){
if (regxO.IsMatch(input))
{
input = regxO.Replace(input, @"0",2);
}
else
{
input = regxI.Replace(input, "1");
}
}
return input;
}
我正在尝试使用组号,但在提供组号时,我无法提供自定义替换字符串。
答案 0 :(得分:2)
您捕获一个组以提取数据,保留某些文本,而不是删除/替换这些文本。
您可以在数字之间匹配O
或I
,并在匹配评估者中将O
替换为0
,将I
替换为1
:
var dct = new Dictionary<string, string>();
dct.Add("O", "0");
dct.Add("I", "1");
var s = "9O9 8I8";
var result = Regex.Replace(s, @"(?<=\d)[OI](?=\d)", m => dct[m.Value]);
Console.WriteLine(result); // => 909 818
请参阅C# demo。
此处,(?<=\d)[OI](?=\d)
模式匹配数字之间的O
或I
,值(m.Value
)用作在字典中查找相应值的键
使用捕获组:
var result = Regex.Replace(s, @"(\d)([OI])(\d)",
m => $"{m.Groups[1].Value}{dct[m.Groups[2].Value]}{m.Groups[3].Value}");
请参阅another C# demo。