Quiero reemplazar una cadena Unicode con un tipo diferente cuando se trata de un tipo específico de cadena Unicode en la cadena.

EJ) 1.

//Hexadecimal 4characters
string base="U+1234FFFF040001041234";
//I want to replace this type----> ሴЀĄሴ

EJ) 2.

//Hexadecimal 4characters
string base="U+1234 U+FFFF U+0400 U+0104 U+1234";
//----> ሴ  Ѐ Ą ሴ

Me pregunto cómo hacer coincidir patrones con expresiones regulares. Y me pregunto cómo puedo reemplazarlo de esa manera.

0
lcy 24 mar. 2017 a las 04:46

2 respuestas

La mejor respuesta
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);                     
        }
0
lcy 29 mar. 2017 a las 01:48

No estoy familiarizado con C # (uso Java principalmente), pero aquí hay una descripción abstracta de lo que haría:

EJ) 1. - Convertir la cadena en una matriz de caracteres

  • Crear una cadena vacía (Cadena s = "")

  • Cree un bucle que agregue el prefijo, más los siguientes cuatro caracteres (en bucle: s = s + "& # x" + charArray [k] + charArray [k + 1] + charArray [k + 2] + charArray [k + 3])

  • Agrega el punto y coma al final

EJ) 2.

  • el patrón que querrá hacer coincidir y que se reemplazará es: "U \ +", y lo reemplazará con "; & # x". Pero tendrá que quitar el primer U + de antemano.

La razón por la que tiene que agregar una barra invertida antes del signo más es porque ese es el operador de repetición, y la barra invertida se escapará. No sé acerca de C #, pero en Java, tienes que escapar del escape en una cadena, por lo que en realidad usarías "U \\ +"

0
dukr 24 mar. 2017 a las 03:30