当涉及到字符串中特定类型的Unicode字符串时,我想用不同的类型替换Unicode字符串。
EX)1。
//Hexadecimal 4characters
string base="U+1234FFFF040001041234";
//I want to replace this type----> ሴЀĄሴ
EX)2。
//Hexadecimal 4characters
string base="U+1234 U+FFFF U+0400 U+0104 U+1234";
//----> ሴ  Ѐ Ą ሴ
我想知道如何使用正则表达式进行模式匹配。 我想知道如何以这种方式取代它。
答案 0 :(得分:0)
我不熟悉C#(我主要使用Java),但这里是我将要做的抽象描述:
EX)1。 - 将字符串转换为字符数组
创建一个空字符串(String s =“”)
创建一个添加前缀的循环,加上接下来的四个字符(循环中:s = s +“& #x”+ charArray [k] + charArray [k + 1] + charArray [k + 2] + charArray [k + 3])
在末尾添加分号
EX)2。
你必须在加号之前添加反斜杠的原因是因为这是重复运算符,反斜杠将使其转义。我不知道C#,但是在Java中,你必须在字符串中逃避转义,所以你实际上会使用“U \\ +”
答案 1 :(得分:0)
Regex regexUnicode = new Regex(@"U\+([0-9A-F]{4})+");
MatchCollection resultCollection = regexUnicode.Matches(str);
foreach (Match matched in resultCollection) {
int length = matched.Groups[0].Length;
string matchedStr = matched.Groups[0].ToString();
int startIndex = str.IndexOf(matchedStr);
string temp = matchedStr;
string ret = "";
string buffer = "";
int bufCount = 0;
for (int i = 0; i < matchedStr.Length; ++i) {
if (matchedStr[i] == 'U' || matchedStr[i] == '+') {
continue;
} else if (bufCount != 4) {
buffer += matchedStr[i];
bufCount++;
} else if (bufCount == 4) {
ret += "&#x" + buffer + ";";
buffer = "";
buffer += matchedStr[i];
bufCount = 1;
}
}
ret += "&#x" + buffer + ";";
str = str.Remove(startIndex, matchedStr.Length);
str = str.Insert(startIndex, ret);
}