簡體   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