1

英語 (またはヨーロッパ言語) の文の最後の単語に一致する Java コードではなく、正規表現パターンを探しています。この場合、最後の単語が「こんにちは」の場合、「こんにちは」ではなく「こんにちは」に一致させたいと考えています。

正規表現(\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 で最後の文字を削除できることはわかっています。)

どの正規表現をパターンに入れる必要がありますか?

4

6 に答える 6

0

この正規表現(\w+)\p{Punct}を使用すると、グループ カウント 1 が得られます。これは、 に句読点のある 1 つのグループとmatcher.group(0)に句読点がないグループが 1 つ得られることを意味しますmatcher.group(1)

Java で正規表現を記述するには、次を使用します。"(\\w+)\\p{Punct}"

Java (および実際には他の多くの言語) を使用してオンラインで正規表現をテストするには、RegexPlanetを参照してください。

于 2013-09-12T10:43:33.060 に答える
0

理由は本当にわかりませんが、これは機能します:

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+)");  //(\w+)\.
        Matcher matcher = pattern.matcher(sentence);
        String match = null;
        while (matcher.find()) {
            match = matcher.group();
        }
        System.out.println(match);
    }
}

正規表現はすべての単語に一致すると思い\w+ます(doh)。それから最後の言葉は私が求めていたものです。単純すぎて、本当に、句読点を除外しようとしていましたが、正規表現は自動的にそれを行うと思います..?

于 2013-09-12T10:39:35.567 に答える