1. ホーム
  2. java

[解決済み] 句読点に関する正規表現

2022-03-01 05:55:19

質問

ということで、私は全く初めて 正規表現 を使おうとしているのですが、Javaの java.util.regex 入力文字列の中の句読点を見つけるために (1) !, ?, ., ... はすべて有効な句読点であり、(2) "<" と ">" は何か特別な意味があり、句読点として数えられないことを除いて、どんな句読点が得られるかを前もって知っておくことはありません。 プログラム自体が擬似的にランダムにフレーズを構築するので、ランダムなプロセスを経る前に文末の句読点を取り除きたいのです。

単語全体と任意の句読点をマッチングさせることができますが、マッチャーはその単語のインデックスを与えるだけです。つまり

Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher([some input string]);

を含むすべての単語を取得します。 "!" を末尾に付けます。例えば

String inputString = "It is a warm Summer day!";
Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher(inputString);
String match = inputString.substring(m.start(), m.end());

は --> String match ~ "day!".に該当します。

しかし、私は Matcher のみで構成されます。 "!" というように、分割すればいいんです。

ケースを作ることができるかもしれませんし String.substring(...) のような句読点が出るかもしれませんが、正規表現の使い方で何か間違いがあればと思います。

どのように解決するのですか?

私なら、次のような文字クラスの正規表現を試します。

"[.!?\\-]"

の中に、マッチさせたい文字を追加してください。 [] s. 正規表現パーサーが特別な意味を持つ可能性のある文字をエスケープすることに注意してください。

次に、マッチしたものを繰り返し処理するために Matcher.find() がfalseを返すまで。