如何从字符串的开头和结尾修剪所有非字母数字和数字字符?
本文关键字:数字字符 数字 修剪 字符串 结尾 开头 | 更新日期: 2023-09-27 18:18:58
编辑:我改变了标题,以反映我想要做的事情。
是否有一种方法可以检索.NET中当前区域性的所有字母数字(或者最好只是字母)字符?我的场景是,我有几个字符串,我需要删除所有的数字和非字母字符,我不太确定我将如何实现这一点,同时尊重除英语以外的语言的字母(除了为所有支持的。net语言创建所有字母字符的数组,或者至少是我们当前客户端的语言lol)
更新:具体来说,我要做的是从字符串的开始到第一个字母字符修剪所有非字母字符,然后从最后一个字母字符到字符串的结尾。举一个en-US的随机例子,我想转到:
()&*1@^#47*^#21%Littering aaaannnnd(*&^1#*32%#**)7(#9&^
变成如下:
Littering aaaannnnd
这对于英语来说很简单,因为这是我的第一语言,但实际上在任何文化中,我都需要能够从字符串中删除数字和其他非字母数字字符。
string something = "()&*1@^#47*^#21%Littering aaaannnndóú(*&^1#*32%#**)7(#9&^";
string somethingNew = Regex.Replace(something, @"[^'p{L}-'s]+", "");
这是你要找的吗?
编辑:添加允许其他语言字符。这将输出垃圾aaaannnndóú
使用regex方法,这应该是:
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
不使用正则表达式:在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非常直接,只需要搜索字符编码就能找到字母字符的整数值,你可以用它来做