在java中使用正则表达式拆分字符串

时间:2015-10-06 14:02:31

标签: java regex

我有一个字符串“你叫什么名字?”在如下所示的变量中。

String str="What is your name ?";
String[] splitString =str.split("\\is+");

我想以这样的方式分割字符串,即我只想要 之间的字词。即。使用正则表达式

yourname

任何人都可以告诉我一些解决方案。

5 个答案:

答案 0 :(得分:1)

我会替换和拆分。

 string.replaceFirst(".*\\bis\\b\\s*(.*?)\\s*\\?.*", "$1").split("\\s+");

答案 1 :(得分:1)

糟糕的解决办法是首先提取子基地,然后使用拆分:

String substring = str.substring(str.indexOf("is")+2,str.indexOf("?"));
String[] splitString =substring.trim().split(" ");

答案 2 :(得分:1)

您可以使用replaceFirst,然后使用split

String str="What is your name?";
String[] splitString =str.replaceFirst(".*[[Ii][Ss]]\\s+","").split("\\s*\\?.*|\\s+");
for (int i=0; i< splitString.length; i++){
    System.out.println("-"+splitString[i]);
}
删除字符串的第一部分replaceFirst需要

What is。正则表达式.*[[Ii][Ss]]\\s+表示 - 不区分大小写的IS之前的任何符号以及之后的所有空格。如果它会停留,我们将在拆分时获得一个额外的空字符串。

更换后,它会通过

拆分剩下的字符串

\\s+一个或多个空格

\\s*\\?.* ?符号前面有所有空格,后面是任何字符

答案 3 :(得分:1)

您可以使用以下内容:

String str="What is your name ?";
String[] splitString = str.replaceAll(".*? is (.*) \\?", "$1").split(" ");
// [your, name]

<强> IdeOne demo

更新:如果要匹配不区分大小写,只需添加不敏感标记:

String str="What is your name ?";
String[] splitString = str.replaceAll("(?i).*? is (.*) \\?", "$1").split(" ");

答案 4 :(得分:0)

使用正则表达式is([^\?]+)并捕获第一个子组并将其拆分     这是一个稍长的方法,但是在核心Java中这是正确的方法。您可以使用正则表达式库来执行此操作

   import java.util.regex.Matcher;
   import java.util.regex.Pattern;
    //Later
    String pattern="`is([^\?]+)"
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    var words=m.group(1)