【问题标题】:Java Regex matching wordJava 正则表达式匹配词
【发布时间】:2015-04-13 12:09:49
【问题描述】:

我有一个文件正在阅读并搜索单词。

名字 = 杰克

主动多普勒名称 = 200ms

使用搜索即时通讯时

if(line.contains("name")

这个语句找到了这两行,但我只需要它来找到第一行,因为我有一个单独的语句来细化“活动多普勒名称”。所以我需要正则表达式的帮助来检查它在“名称”这个词之前是否只是空格。这些是我想出的一些选项,但不起作用

if(line.contains("\\s+\bname")

if(line.contains("^\\s+name")

谢谢

【问题讨论】:

    标签: java regex string search


    【解决方案1】:

    String.contains 不接受正则表达式作为参数。

    你可以使用:

    // matches the whole line:
    //            ┌ start of input
    //            | ┌ any or no whitespace (as your original pattern suggests)
    //            | |  ┌ literal "name"
    //            | |  |   ┌ any other character sequence to follow, or no characters
    line.matches("^\\s*name.*");
    

    注意

    如果您想对此进行改进,您可以声明一个常量Pattern,并匹配/反向引用每一行。

    例如:

    // similar as before, but captures the value for "name" 
    // and validates with "=characters" after it
    static final Pattern NAME_VALUE = Pattern.compile("^\\s*name\\s*=\\s*(.+)");
    // ...
    Matcher m = NAME_VALUE.matcher(line);
    if (m.find()) {
        // "jake"
        String myValue = m.group(1);
    }
    

    【讨论】:

    • @Nate 不客气。请务必检查我的编辑,这可能会派上用场。
    【解决方案2】:

    如果 "name" 始终是您的行中的第一个单词,您可以匹配 /^ *(name)/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2013-07-09
      • 1970-01-01
      • 2011-03-30
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多