正则表达式 - 忽略匹配字符串的一部分

时间:2014-06-03 02:57:12

标签: java regex

我有一些文字,我想要对这样的事情进行罚款

 "Name DAVID"

我想在这个更大的文字中匹配“DAVID”。 我尝试使用这样的正则表达式:

 (Name(.*))

以及

 (?:Name(.*))

但这也与“姓名”匹配,我只想匹配“大卫”。

4 个答案:

答案 0 :(得分:0)

放下额外的parens:

"Name (.*)"

即使这可能过度,你可能想要更像的东西:

"Name (\w*)"

准确捕捉您想要的角色。

答案 1 :(得分:0)

您需要使用Matcher。这段代码对我有用

public static void main(String[] asdf) {
           String text = "NAME David";
           Pattern p = Pattern.compile("NAME (.+)");
           Matcher m = p.matcher(text);
           if (m.matches()){
               System.out.println(m.group(1));
           }
    }

请注意,m.matches()是强制性的,m.group(1)会抛出java.lang.IllegalStateException: No match found

答案 2 :(得分:0)

字符串matches()

public static void main(String[] args) {
    String regex = "^Name(.+)$";
    System.out.println("Name".matches(regex));
    System.out.println("Name MIKE".matches(regex));
    System.out.println("Name DAVID".matches(regex));
}

答案 3 :(得分:0)

出于某种原因,看起来您的问题尚未得到正确的正则表达式的回答。

以下是您要找的内容:

(?<=Name )DAVID

这仅在适当的上下文中匹配DAVID(请参阅demo)。

您可能知道这一点,但这是一种使用此正则表达式测试字符串的方法:

Pattern regex = Pattern.compile("(?<=Name )DAVID");
Matcher regexMatcher = regex.matcher(subjectString);
foundMatch = regexMatcher.find();

解释正则表达式

(?<=                     # look behind to see if there is:
  Name                   #   'Name '
)                        # end of look-behind
DAVID                    # 'DAVID'