我需要一个RegEx模式,它允许我将一组中的字符替换为另一组中的相应字符。例如:set [abcdefg],应该用set [1234567]替换...所以在" bag"的字符串中,我希望我的替换为" 217"。
Regex regX = new Regex("([abcdefg])([1234567])");
string result = regX.Replace("bag", "$1$2");
我的结果与来源相同。我的替换模式应该是什么?
答案 0 :(得分:2)
像这样的东西比正则表达式要好得多:
var fromCharacters = "abcdefghijklmnopqrstuvwxyz";
var toCharacters = "12345678901234567890123456";
var myString = "bag";
var sb = new StringBuilder(myString.Length);
for (int i = 0; i < myString.Length; ++i)
{
sb.Append(toCharacters[fromCharacters.IndexOf(myString[i])]);
}
sb.ToString().Dump();
如果你愿意,你可以做类似的事情,例如,'j'变成'10',但你需要一个字符串数组,而不是能够使用字符串作为字符数组。
我不确定如何用正则表达式做到这一点,但我知道你不应该这样做。
答案 1 :(得分:2)
string result = Regex.Replace("abcdefghiABCDEFGHI", "[a-zA-Z]",
m => (('a' <= m.Value[0] && m.Value[0] <= 'z'
? m.Value[0] - 'a'
: m.Value[0] - 'A') + 1).ToString());
Console.WriteLine(result);
// 123456789123456789
我使用MatchEvaluator
委托将每个匹配替换为相应的值。
有关它的另一个示例,请参阅this。
你的模式的问题是没有人期望输入字符串中的数字,所以它不应该是模式的一部分。
答案 2 :(得分:0)
我在这里使用Dictionary<char, char>
字符匹配:
var dict = "abcdefg"
.Zip("1234567", (k, v) => new { k, v })
.ToDictionary(i => i.k, i => i.v);
var result = string.Concat("bag".Select(c => dict[c]));
这会让你:
217
答案 3 :(得分:-1)
你还没有提到一种语言,我会告诉你如何在php中完成它。您可以根据自己的需要进行修复。
在您更换的情况下,您的参数应该是数组
$ num = array(“1”,“2”,“3”,“4”,“5”,“6”,“7”);
$ chr = array(“a”,“b” ,“c”,“d”,“e”,“f”,“g”);
那么你可以使用str_replace或preg_replace
$ str =“这是一个样本text“;
echo str_replace($ chr,$ num,$ str);
你可以使用regexp作为第一个参数作为模式,但在这种情况下不能用于astring。