匹配特定字符之前的所有单词的正则表达式

3
我需要在特定字符之前(例如冒号:)提取字符串中的所有单词。
例如:
String temp = "root/naming-will-look-like-this:1.0.0-SNAP";

从上面的字符串中,我想要返回:

"root" "naming" "will" "look" "like" "this"

我不太擅长正则表达式,到目前为止,我想出了这个。

\w+(?=:)

我只想返回冒号前面的一个单词(“this”)。

如何获取冒号前面的所有单词?

提前感谢。


请给我们您对“word”的定义。 它是否只包含字母A到Z(不区分大小写)? - Michael
是的,任何a-z(不区分大小写)都可以。我希望它们被提取为“单词”,而不是单个字符。例如,“root”而不是“r”,“o”,“o”,“t”。 - IrishCrf
由于单个匹配操作无法提供多个结果,因此您必须更具体地说明您打算如何收集结果。例如,您可以使用 split 创建一个数组(然后需要分隔符模式),或者在 Matcher 上重复调用 find() (那么您需要单词模式)... 如果您想要一个数组,您可以像这样一次性完成它 String[] array = temp.split("\\W*:.*|\\W+"); - Holger
3个回答

6
你可以像这样使用前瞻符号:
\w+(?=.*:)

正则表达式演示

\w+ 将匹配所有单词,前瞻(?=.*:) 会断言我们前面有一个冒号:


请注意,此功能将查找最后一个冒号之前的单词,如果有多个冒号。 - Holger

1

试试这个:

    String s = "root/naming-will-look-like-this:1.0.0-SNAP";
    s = s.replaceAll(":.*", "");
    String[] arr = s.split("\\W+");

0

使用\G锚点,再加上Java的字符类交集,您可以将单词存储到第一个捕获组中:

\G(\w+)[\W&&[^:]]*

这个无法绕过下面输入字符串中的多个冒号:

root/naming-will-look-like-this:1.0.0-SNAP:some-thing-else

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接