2010-11-15 3 views
1

Запись файловой утилиты для удаления всех символов, отличных от ASCII, из файлов. Я это Регулярное выражение:Замена всех символов, отличных от ASCII, за исключением символа прямого угла в C#

Regex rgx = new Regex(@"[^\u0000-\u007F]"); 

Какой из них прекрасно работает. Но, к сожалению, я обнаружил, что некоторые глупые люди используют под прямым углом (¬) в качестве разделителей в своих файлах, поэтому их тоже убирают, но мне нужны эти!

Я довольно новичок в Regex, и я понимаю основы, но любая помощь была бы потрясающей!

Заранее благодарен!

+0

** ПОЖАЛУЙСТА, НЕ ДЕЛАЙТЕ ЭТО ** – tchrist

+0

@tchrist: почему бы и нет? –

+2

Потому что это [¡⅁uoɹʍ puɐ ⅂IɅƎ] (http://stackoverflow.com/questions/4174089/regular-expression-to-anglicize-string-characters/4174112#4174112), вот почему !!! – tchrist

ответ

3

Вам просто нужно включить точку кода для углового кронштейна в комплекте:

Попробуйте это:

Regex rgx = new Regex(@"[^\uxxxx\u0000-\u007F]"); 

Или это:

Regex rgx = new Regex(@"[^\uxxxx-\uxxxx\u0000-\u007F]"); 

(где хххх является Unicode код для символа, который вы хотите сохранить.)

Причиной для предоставления двух вариантов здесь является что я знаю, что вы можете указать несколько диапазонов в пределах одной группы отрицательных символов, но я не знаю, можете ли вы сопоставлять отдельные символы с диапазонами.

+0

Почему вы не можете сопоставлять отдельные символы в пределах диапазонов? Я не знаю диалогов регулярных выражений, где это не будет работать, предварительное преобразование Java '\ uXXXX' перед лексическим анализом. – tchrist

+0

Я пробовал оба из них, а также использовал '|'. Я действительно не понимаю, почему он не работает. Это консольное приложение, если это имеет значение? Но я не думаю, что это нужно, прямые углы просто появляются как «?» без применения Regex, но исчезает, когда он есть, поэтому он должен быть лишен Regex. Смущенный! –

+1

@New, когда вещи появляются как "?" символов, которые не должны, что всегда указывает на проблему с кодировкой. Где-то что-то думает, что ваш текст находится в другом кодировании, чем есть на самом деле. Обычно это означает, что вам нужно объявить, какую кодировку вы действительно используете, поскольку по умолчанию это не относится к рассматриваемому тексту. – tchrist

1

Ответ Джона абсолютно правильный. Возможно, вы используете неправильный код для персонажа. Попробуйте следующее для аналогичных символов:

Regex regex = new Regex(@"([^\u00ac\u0000-\u007F])"); 
Regex regex = new Regex(@"([^\u02fa\u0000-\u007F])"); 
Regex regex = new Regex(@"([^\u031a\u0000-\u007F])"); 

Первый должен работать, я думаю.