【问题标题】:How to find a string including non word character?如何查找包含非单词字符的字符串?
【发布时间】:2015-03-09 18:16:52
【问题描述】:

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

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'" 它什么都不匹配。

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

谢谢。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    一个简单的解决方案,如果你可以修改要搜索的字符串,将它与一个空格前后连接,然后简单地搜索“l”

    【讨论】:

    • 已经试过了,但是如果搜索字符串在开头还是结尾都行不通。
    • 有趣,因为我认为我的解决方案会直接反击开始和结束搜索。为什么这行不通? '字符串 inputStr = " " + "l l'oreal s.a. l l' ab l" + " "; System.out.println(inputStr);字符串 searchStr = " l ";'
    • 对于那里的评论格式不佳,我深表歉意
    • 在您的示例中,由于您正在向输入字符串添加空格,因此它将匹配。如果你拿这一段的话,段首有空格吗?
    【解决方案2】:

    可能是单词边界后跟空格或输入结尾。

    你的情况是l

    \b(l)(\s+|$)
    

    Demonstration

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多