有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何查找包含非单词字符的字符串?

如何查找包含非单词字符的字符串

Example input: l l'oreal s.a. l l' ab l
search String: l
output: XX l'oreal s.a. XX l' ab l
Expected: XX l'oreal s.a. XX l' ab X

我试图使用下面的正则表达式在输入字符串中查找搜索字符串

    String inputStr = "l l'oreal s.a. l l' ab l";
    System.out.println(inputStr);
    String searchStr = "l";

    Pattern pattern = Pattern.compile("(\\b"+ searchStr +"\\b)(?=[\\s])");
    Matcher matcher = pattern.matcher(inputStr);

    if ( matcher.find()){
        String rep = matcher.replaceAll("XX");
        System.out.println("REP:" + rep);
    }else{
        System.out.println("no match...");
    }

正则表达式模式搜索后跟空格(\s)的字符串。但在上面的示例中,它不适用于最后一个字符,因为后面没有空格

主要目标是找到包含非单词字符的字符串,如。。。 private limited(搜索private时应返回false) 你好(搜索Hello时为false) 两种模式都试过了,但都不起作用

pattern = Pattern.compile("(?<![\\w+])" + searchStr + "(?![\\W+])", Pattern.CASE_INSENSITIVE);
pattern = Pattern.compile("(?<=[\\s])(\\b"+ searchStr +"\\b)(?=\\s)");

在上面的示例中,如果我替换searchString=“l'”它与任何内容都不匹配

我的方法正确吗? 我错过了什么

谢谢


共 (2) 个答案

  1. # 1 楼答案

    将前瞻更改为:

    (?=\\s|$)
    

    这将确保输入的空格或结尾符合您的匹配

  2. # 2 楼答案

    看起来你真的不需要有词的界限。您需要匹配项,这些匹配项由空格或字符串结尾包围。为此,您可以使用:

    Pattern pattern = Pattern.compile("((?<=\\s|^)"+ searchStr +"(?=\\s|$))");