1

编写文件实用程序以从文件中删除所有非 ASCII 字符。我有这个正则表达式:

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

哪个工作正常。但不幸的是,我发现一些愚蠢的人在他们的文件中使用直角 (¬) 作为分隔符,所以这些也被删除了,但我需要那些!

我对正则表达式很陌生,我确实了解基础知识,但任何帮助都会很棒!

提前致谢!

4

2 回答 2

3

您只需要在集合中包含尖括号的代码点:

尝试这个:

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

或这个:

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

(其中 xxxx 是您要保留的字符的 Unicode 代码点。)

在这里给出两个选项的原因是我知道您可以在一个负字符组中指定多个范围,但我不知道您是否可以将单个字符与范围匹配。

于 2010-11-15T11:33:31.917 回答
1

乔恩的回答是绝对正确的。您可能使用了错误的字符代码。尝试以下类似的字符:

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

我认为第一个应该工作。

于 2010-11-15T12:18:54.947 回答