如何从字符串的开头和结尾修剪所有非字母数字和数字字符?

时间:2013-06-18 14:22:31

标签: c# .net string .net-4.0 cultureinfo

编辑:我改变了标题,专门反映了我正在尝试做的事情。

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

更新:

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

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

进入以下内容:

Littering aaaannnnd

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

3 个答案:

答案 0 :(得分:1)

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

这是你要找的吗?

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

答案 1 :(得分: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

答案 2 :(得分: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非常简单,只需搜索字符编码,您就会找到字母字符的整数值,您可以使用它来执行此操作。