繁体   English   中英

REGEX字符集替换

[英]REGEX character Set substitution

我需要一个RegEx模式,该模式允许我将一组字符替换为另一组字符。 例如:set [abcdefg],应替换为set [1234567] ...因此,在字符串“ bag”中,我希望替换为“ 217”。

Regex regX = new Regex("([abcdefg])([1234567])");
string result = regX.Replace("bag", "$1$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',则可以执行类似的操作,但是您需要一个String数组,而不是能够将String用作字符数组。

我不确定您将如何使用Regex来执行此操作,但是我知道您不应该这样做。

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委托将每个匹配项替换为相应的值。 参见示例。

模式的问题在于,没有人期望输入字符串中的数字,因此它不应该成为模式的一部分。

我会使用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

您还没有提到一种语言,我将告诉您如何在php中进行操作。 您可以根据需要进行修复。 在替换的情况下,您的参数应该是数组。
$ num = array(“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”);
$ chr = array(“ a”,“ b”,“ c”,“ d”,“ e”,“ f”,“ g”);

然后,您可以使用str_replace或preg_replace
$ str =“这是一个示例文本”;
回声str_replace($ chr,$ num,$ str);

在这种情况下,可以将regexp作为模式的第一个参数使用,但不能将其用作astring。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM