如何使用正则表达式在字符串中查找不同出现的子字符串?

时间:2014-03-09 09:30:20

标签: java regex expression substring

基本上我想做的是:

String mystr = "hello Benjamin Benny Benn hey hey";
String pattern = "Be";

Desired list = {“Benjamin”,“Benny”,“Benn”};

我知道如何以一种非常简单的方式做到这一点。我正在寻找的是基于正则表达式或任何适合我的方法来快速完成它。我想要一个以特定模式开头的所有子字符串(单词)的列表。

3 个答案:

答案 0 :(得分:2)

使用此正则表达式:

Be\w+

它做什么?

它匹配以Be

开头的所有字词

如果你想用其他任何东西开头,只需这样做:

String startsWith="Be"; // change this to match your requirements

String regexPattern=startsWith+"\\w+"; //escaped backslash

现在,您可以替换startsWith中的任何内容,这样您就可以匹配以特定字符串开头的单词。

注意:您需要在java中转义反斜杠。因此\变为\\

答案 1 :(得分:1)

尝试,

String mystr = "hello Benjamin Benny Benn hey hey";
String pattern = "Be";
for(String str : mystr.split("\\s")){
    if(str.matches(pattern+"\\w+")){
         System.out.println("Matched "+str);
         // Add the str to list
    }
}

这里,

\\w+表示 -
单词字符(a-z, A-Z, 0-9, _)(1次或更多次(匹配尽可能多的数量))

\\s表示 -
 空白(\n, \r, \t, \f, and " ")

答案 2 :(得分:0)

我发现这个答案对我有很大帮助:

String yourString = "hi #how are # you";
Matcher matcher = Pattern.compile("#\\s*(\\w+)").matcher(yourString);    
while (matcher.find()) {
  System.out.println(matcher.group(1));
}

这样即使你的预字符串与主字符串分开也能正常工作。