从字符串字符和数字中提取字母

Posted

技术标签:

【中文标题】从字符串字符和数字中提取字母【英文标题】:Extract letter from String characters and numbers 【发布时间】:2017-07-30 17:58:59 【问题描述】:

我有这些Strings

"Turtle123456_fly.me"
"birdy_12345678_prd.tr"

我想要每个单词的第一个单词,即:

Turtle
birdy

我试过了:

 Pattern p = Pattern.compile("//d");
 String[] items = p.split(String);

但这当然是错误的。我不熟悉使用Pattern

【问题讨论】:

How to extract a substring using regex的可能重复 最好你可以使用 string.tochararray() 并检查 ASCII 码你会得到你的答案...! @Shailesh 喜欢this example 【参考方案1】:

用任何东西代替你不想要的东西:

String firstWord = str.replaceAll("[^a-zA-Z].*", "");

只留下你想要的部分。

正则表达式[^a-zA-Z] 表示“不是字母”,从(包括)第一个非字母到结尾的所有内容都被“删除”。

见live demo。

【讨论】:

那么Turtle123456_fly.me 的输出将是Turtleflyme 而不是Turtle @Ocean 不,它不会。我使用了a-zA-Z,而不是\w,并且.* 运行到最后。 啊,对不起,我的错。那么这就是要走的路。比其他解决方案更容易 @Ocean 质疑和怀疑总是好的!我添加了一个现场演示链接来消除您的疑虑。【参考方案2】:
String s1 ="Turtle123456_fly.me";
String s2 ="birdy_12345678_prd.tr";

Pattern p = Pattern.compile("^([A-Za-z]+)[^A-Za-z]");
Matcher matcher = p.matcher(s1);

if (matcher.find()) 
    System.out.println(matcher.group(1));

说明: 第一部分^([A-Za-z]+) 是一个组,它捕获锚定到输入开头的所有字母(使用 ^ 锚)。 第二部分[^A-Za-z] 捕获第一个非字母,并作为字母序列的终止符。 然后我们剩下要做的就是获取索引为 1 的组(组 1 是我们在第一个括号中的内容)。

【讨论】:

请不要发布代码并告诉“试试这个”......这个社区是关于学习的东西,而不是分享源代码......解释代码的主要部分是什么,并且代码的这些部分至少是做什么的。【参考方案3】:

也许你应该试试这个\d+\w+.*

【讨论】:

以上是关于从字符串字符和数字中提取字母的主要内容,如果未能解决你的问题,请参考以下文章

(VBA Excel) 从字符串中提取文本和相关字母并输出结果

如何从字符串中提取简单的数字表达式数字?

不使用任何预定义函数从字母数字字符串中提取数值

从字符串中提取单词 - 微妙的问题

JavaScript中如何提取字符串?

从字符串中提取单个(无符号)整数