我是Java和Regex的初学者,这是我第一次使用堆栈溢出。 我想知道你是否可以使用正则表达式执行以下操作。
例如,假设您要将字符串与以下正则表达式匹配: “。什么时候(\ w +)。” - 我试图在“什么时候”之后得到这个事件
我可以使用matcher.group(index)获取事件,但如果事件就像退伍军人节那样,这不起作用,因为它是两个单词。我只能在“什么时候”之后得到第一个字 我应该使用什么正则表达式来获取'when is'之后的所有单词
非常感谢您的时间和帮助!
首先,感谢所有人的帮助 还有第二个问题.. 让我们说我想抓住某人的bday 喜欢'什么时候是*生日 如何使用正则表达式捕获is和birthday之间的所有文本?
答案 0 :(得分:4)
你可以试试这个:
^when is (.*)$
这将找到一个以when is
开头的字符串,并将所有其他内容捕获到该行的末尾。
正则表达式将返回一个组。您可以像这样访问它:
String line = "when is Veteran's Day.";
Pattern pattern = Pattern.compile("^when is (.*)$");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println("group 1: " + matcher.group(1));
System.out.println("group 2: " + matcher.group(2));
}
输出应为:
group 1: when is Veteran's Day.
group 2: Veteran's Day.
答案 1 :(得分:2)
如果要允许匹配空格,则应明确允许空格。
([\w\s]+)
但是,如果您想在when is
之后捕获所有内容,roydukkey的解决方案将会有效。
答案 2 :(得分:0)
您可以将其表达为字符类,并在其中包含空格:when is ([\w ]+)
。
答案 3 :(得分:0)
\w
仅包含单词字符,不包含空格。请改用[\w ]+
。
答案 4 :(得分:0)
当你不需要时,不要使用正则表达式!!虽然正则表达式的理论很漂亮,你可以让字符串为你做代码操作,但对于简单的用例来说,它的内存效率非常低。
如果你试图在“什么时候”以空格结尾后得到这个词,你可以这样做:
String start = "when is ";
String end = " ";
int startLocation = fullString.indexOf(start) + start.length();
String afterStart = fullString.substring(startLocation, fullString.length());
String word = afterStart.substring(0, afterStart.indexOf(end));
如果您知道最后一个单词是Day,您可以只使end =“Day”并添加该字符串的长度以结束第二个子字符串。