如何在Java中使用正则表达式找到带有点的单词?

时间:2013-02-19 21:54:09

标签: java regex

我是Java的新手。我想在文本文件中搜索一个字符串。假设文件包含:

  

嗨,我正在学习Java。

我正在使用以下模式来搜索每个确切的单词。

Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);

它工作正常,但没有找到“java”。如何找到这两种模式。即带边界符号和“。”在字符串的末尾。有没有人对如何解决这个问题有任何想法?

3 个答案:

答案 0 :(得分:4)

您应该解析搜索字符串,以便将点.更改为RegEx点:\\.。请注意a single dot is a metacharacter in Regular Expressions并且表示任何字符。例如,您可以替换字符串中\\.

的所有点

如果您不想完成所有工作,请发送java\\.作为搜索字符串

更多信息:

代码示例:

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java";
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}

会打印:17 java

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java\\.";
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}

它将打印:17 java.(注意最后的点)

编辑:作为一个非常基本的解决方案,因为您唯一的问题是使用点,您可以用\\.替换字符串中的所有点

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java.";
    //this will do the trick even if the "searchString" doesn't contain a dot inside
    searchString = searchString.replaceAll("\\.", "\\.");
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}

答案 1 :(得分:0)

"\\b" + searchstring + "(?:\\.|\\b)"

如果你想规定点必须后跟一个非单词字符或字符串的结尾,你可以添加一个正面的预测

"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"

答案 2 :(得分:0)

Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);

为了绝对肯定,上面说“找到一些以0或更多字符开头的文字,后面跟着0个或更多非字字符(\ W * - 字边界)后跟搜索字,然后是下一个单词边界,后跟其他任何“。

这将迎合搜索词位于文件开头,最后或标点符号之间的情况,例如:“嗨,我正在学习,java。”。

希望这会有所帮助......