-1

あるセットの文字を別のセットの対応する文字に置き換えることができる正規表現パターンが必要です。例:set [abcdefg]、set [1234567]に置き換える必要があります...したがって、「bag」の文字列では、置き換えを「217」にします。

Regex regX = new Regex("([abcdefg])([1234567])");
string result = regX.Replace("bag", "$1$2");

私の結果はソースと同じです。置換パターンはどうあるべきですか?

4

4 に答える 4

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」に変換したい場合は、同様のことを行うことができますが、文字列を文字の配列として使用する代わりに、文字列の配列が必要になります。

正規表現でこれをどのように行うかはわかりませんが、すべきではないことは知っています。

于 2013-02-07T02:16:08.413 に答える
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、各一致を対応する値に置き換えました。別の例については、これを参照してください。

パターンの問題は、入力文字列内の数字を誰も期待していないため、パターンの一部であってはならないということです。

于 2013-02-07T02:16:40.113 に答える
0

Dictionary<char, char>ここで一致する文字のforを使用します:

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
于 2013-02-07T08:50:48.523 に答える
-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="これはサンプルテキストです";
echo str_replace($ chr、$ num、$ str);

パターンとしての最初のパラメータとして正規表現を使用できますが、この場合は文字列には使用できません。

于 2013-02-07T01:58:22.823 に答える