Вы можете использовать два регулярных выражения. Первый, с рисунком "\t|<bullet>"
(где <bullet>
обозначает представление пули) используется сначала, чтобы заменить TAB и пули пробелами (" "
). Второй, шаблон которого является отрицательным набором символов, содержащим ваш список допустимых символов, используется во-вторых, чтобы заменить недопустимые символы пустой строкой (""
), то есть избавиться от них. Так как вам нужно, чтобы сохранить CR и LF символов (и пространства), то они должны быть добавлены в набор допустимых символов:
using System;
using System.Text.RegularExpressions;
static class Program
{
public static void Main()
{
string pattern1 = @"\t";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);
string input = "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\nárvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}
Выход:
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp
Обратите внимание, что TAB после árvíztűrő
был заменен одно пространство.
О пуль:
Я сделал маркированный список в Слове и скопировать его в текстовое поле на веб-странице. Затем я сохранил HTML и понял, что пули сохраняются как символ с кодировкой UTF-8 E280A2
. Это то, что я назвал выше «представления пули». Вы должны выяснить, бинарное представление возможных символов пулевых и добавить их к первой схеме: либо OR их символу табуляции, или поместить их все в набор символов:
using System;
using System.Text;
using System.Text.RegularExpressions;
static class Program
{
public static void Main()
{
byte[] bulletBytes = new byte[] { 0xE2, 0x80, 0xA2 };
string bullet= Encoding.UTF8.GetString(bulletBytes);
string pattern1 = @"[\t" + bullet + "]";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);
string input =
bullet + "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\n" +
bullet + "árvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}
Output (вы должны изменить консольный шрифт Lucida Console, чтобы увидеть пулю):
•ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
•árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp
Теперь в дополнение к TAB, пуля в начале каждой строки также была заменена пробелом.
Я знаю, что это не совсем то, что вам нужно, но как насчет включения редактора WYSIWYG в 'textarea', который дает возможность вставить из Word. [TinyMCE] (http://www.tinymce.com/wiki.php/Plugin:paste) имеет плагин для этой задачи? – Tr1stan
Это не вариант для меня на данный момент. – NoobDeveloper
Используйте SQL-функцию 'ASCII', чтобы выяснить, какой именно символ, я предполагаю, что вы ищете неправильный: http://msdn.microsoft.com/en-us/library/ms177545.aspx – Arran