正则表达式匹配$符号后跟任何单词并保留单词

Mor*_*gan 3 java regex

我试图为此提出正则表达式,但无济于事.以下是我需要的一些例子.[]表示数组作为输出.

输入

Hello $World
Run Code Online (Sandbox Code Playgroud)

产量

[$World]
Run Code Online (Sandbox Code Playgroud)

输入

My name is $John Smith and I like $pancakes
Run Code Online (Sandbox Code Playgroud)

产量

[$John, $pancakes]
Run Code Online (Sandbox Code Playgroud)

我设法提出这个,它匹配模式,但不保留它找到的单词.

String test = "My name $is John $Smith";
String[] testSplit = test.split("(\\$\\S+)");
System.out.println(testSplit);
Run Code Online (Sandbox Code Playgroud)

产量

[My name ,  John ]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它完全吞噬了我需要的单词,更具体地说,是与模式相匹配的单词.我怎么能让它返回一个只有我需要的单词的数组?(如例子所示)

jac*_*rms 6

split采用正则表达式,并专门拆分该正则表达式周围的字符串,以便它分割的内容不会保留在输出中.如果你想要它所发现的东西分开,你应该使用Matcher该类,例如:

String line = "My name $is John $Smith";
Pattern pattern = Pattern.compile("(\\$\\S+)");
Matcher matcher = pattern.matcher(line);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)

这将找到String中模式的所有匹配并打印出来.这些是split用于分割字符串的相同字符串.

  • 在这种情况下,它是相同的,因为您只有一个匹配组.在这里检查`group(int)`的规格:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group(int) (2认同)