【发布时间】:2013-09-12 10:25:38
【问题描述】:
我正在寻找正则表达式模式,而不是 Java 代码,以匹配英语(或欧洲语言)句子中的最后一个单词。如果在这种情况下最后一个词是“hi”,那么我想匹配“hi”而不是“hi”。
正则表达式(\w+)\.$ 将匹配“hi.”,而输出应该只是“hi”。什么是正确的正则表达式?
thufir@dur:~/NetBeansProjects/regex$
thufir@dur:~/NetBeansProjects/regex$ java -jar dist/regex.jar
trying
a b cd efg hi
matches:
hi
trying
a b cd efg hi.
matches:
thufir@dur:~/NetBeansProjects/regex$
代码:
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String matchesLastWordFine = "a b cd efg hi";
lastWord(matchesLastWordFine);
String noMatchFound = matchesLastWordFine + ".";
lastWord(noMatchFound);
}
private static void lastWord(String sentence) {
System.out.println("\n\ntrying\n" + sentence + "\nmatches:");
Pattern pattern = Pattern.compile("(\\w+)$");
Matcher matcher = pattern.matcher(sentence);
String match = null;
while (matcher.find()) {
match = matcher.group();
System.out.println(match);
}
}
}
我的代码是用 Java 编写的,但这既不是这里也不是那里。我正在严格寻找正则表达式,而不是 Java 代码。 (是的,我知道用 Java 可以去掉最后一个字符。)
我应该在模式中加入什么正则表达式?
【问题讨论】:
-
您在代码中使用的正则表达式中没有
\.。您的正则表达式对我来说是正确的,捕获组将包含不带句点的单词。 -
等等,所以你要匹配行中的最后一个单词。如果该行以句号结尾,那么您不想有句号吗?
-
@Taemyr 完全正确。如果有句号,那就是最后一个字。
-
我已经更新了我的答案以反映这一点。
-
@cyon LOL,是的,我不明白。看看我对你所说的做的回答(虽然我一开始不明白你的意思)。