我有一些文字,我想要对这样的事情进行罚款
"Name DAVID"
我想在这个更大的文字中匹配“DAVID”。 我尝试使用这样的正则表达式:
(Name(.*))
以及
(?:Name(.*))
但这也与“姓名”匹配,我只想匹配“大卫”。
答案 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'