2015-08-12 3 views
3

Я пытаюсь разобрать строку и удалить из нее «emojis» и сохранить новые строки.Разбор одной строки дает два разных значения

Итак, у меня есть этот кусок кода:

string text = "S H A V A . Est 2015\nBandung\nLine: @ubm5921j\nBbm: 7D2E6310\nFAST ORDER\ud83d\udc47\ud83c\udffe\ud83d\udc47\ud83c\udffe"; 
MessageBox.Show(text); 
string result = Regex.Replace(text, @"\p{Cs}", ""); 

Выход «текст» здесь является следующее:

enter image description here

Итак, как вы можете видеть новые линии работы отлично, и в конце его есть «emojis», а на следующей строке он удаляет их ОТЛИЧНО. Таким образом, строка результата будет содержать ту же строку с новыми строками и emojis.

В другой части программы у меня есть этот код.

//uu.description is the same string as above 'text', 
//this is where I scrape directly from html 
string text2 = uu.description; 
MessageBox.Show(text2); 
string result2 = Regex.Replace(text2, @"\p{Cs}", ""); 

enter image description here

Как вы можете видеть, в этом случае, мой text2 выводит строку в формате, как он есть, а регулярное выражение абсолютно ничего не делает. Новые строки не работают, и emojis не удаляются.

Я очень смущен, почему он работает в моем первом случае, а не во втором случае. Я занимаюсь этим часами и не могу понять.

+0

Попробуйте 'string text2 = Regex.Unescape (uu.description);' и замените символы '@" \ p {Cs} "'. Или проверьте код соскабливания: вы получите все символы, сбежавшие в какой-то момент. Пожалуйста, покажите код очистки HTML. –

+0

'string text2 = HttpUtility.HtmlDecode (uu.description);' –

+0

'string text2 = WebUtility.HtmlDecode (uu.description);' если вы используете .NET 4.0 и выше –

ответ

3

Я установил его. Мой фиксированный код выглядит следующим образом:

string text2 = uu.description; 
string result2 = Regex.Replace(Regex.Unescape(text2), @"\p{Cs}", ""); 

По какой-то причине, разобранная строка была с дополнительным \, глядя, как этот \\n. Я хотел бы поблагодарить @стрибижева за его идею! Спасибо.

-1

Try тис

  string text = "S H A V A . Est 2015\nBandung\nLine: @ubm5921j\nBbm: 7D2E6310\nFAST ORDER\ud83d\udc47\ud83c\udffe\ud83d\udc47\ud83c\udffe"; 
      string output = string.Join("",text.Select(x => Encoding.Unicode.GetBytes(new char[] { x })).Select(y => (y[1] << 8) + y[0]).Where(y => y < 256).Select(z => ((char)z).ToString())); 
​ 

Выход из кода

S H A V A . Est 2015 
Bandung 
Line: @ubm5921j 
Bbm: 7D2E6310 
FAST ORDER​ 
+0

Что такое это должно делать? Он дает тот же результат, что и текст. – user5204184

+0

Я преобразовал строку charactedrs в int [], поэтому я могу проверить, имеет ли символ <256 (ASCII) или> = 256 (Unicode) и удалил ll символов> = 256. Затем преобразуется обратно в строку. – jdweng

+0

Вижу. Моя цель - сохранить новые линии и удалить только эможи. Таким образом, \ n должен оставаться в строке. И также, я думаю, проблема в том, что новые строки не работают, они выглядят как обычные буквы, а не новые строки. – user5204184

Смежные вопросы