[英]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.