2

编辑:我更改了标题以具体反映我正在尝试做的事情。

有没有办法在 .NET 中检索当前文化的所有字母数字(或者最好只是字母)字符?我的情况是我有几个字符串需要从中删除所有数字和非字母字符,我不太确定如何在尊重英语以外的语言字母表的同时实现这一点(没有创建所有所有支持的 .NET 语言的字母字符,或者至少是我们当前客户的语言(哈哈)

更新:

具体来说,我要做的是修剪从字符串开头到第一个字母字符,然后从最后一个字母字符到字符串结尾的所有非字母字符。因此,对于 en-US 中的一个随机示例,我想转:

()&*1@^#47*^#21%Littering aaaannnnd(*&^1#*32%#**)7(#9&^

进入以下:

Littering aaaannnnd

这对于英语来说很简单,因为它是我的第一语言,但实际上在任何文化中我都需要能够从字符串中删除数字和其他非字母数字字符。

4

3 回答 3

1
   string something = "()&*1@^#47*^#21%Littering aaaannnndóú(*&^1#*32%#**)7(#9&^";
   string somethingNew = Regex.Replace(something, @"[^\p{L}-\s]+", "");

这是你要找的吗?

编辑:添加以允许其他语言字符。这将输出 Littering aaaannnndóú

于 2013-06-18T15:01:46.633 回答
1

使用正则表达式方法,这应该可以解决:

string input = "()&*1@^#47*^#21%Littering aaaannnnd(*&^1#*32%#**)7(#9&^";
string result = Regex.Replace(input, "(?:^[^a-zA-Z]*|[^a-zA-Z]*$)", ""); //TRIM FROM START & END
于 2013-06-18T15:01:57.853 回答
0

不使用正则表达式:在 Java 中,你可以这样做:

while (true) {
    if (word.length() == 0) {
        return ""; // bad
    }

    if (!Character.isLetter(word.charAt(0))) {
        word = word.substring(1);
        continue; // so we are doing front first
    }
    if (!Character.isLetter(word.charAt(word.length()-1))) {
        word = word.substring(0, word.length()-1);
        continue; // then we are doing end
    }
    break; // if front is done, and end is done
}

如果您正在使用其他东西,那么用 java 替换 Character.isLetter 非常简单,只需搜索字符编码,您就会找到字母字符的整数值,您可以使用它来执行此操作。

于 2014-10-08T19:44:08.427 回答