2

私は正規表現が初めてで、次の正規表現を処理して、指定されたテキストの序数を識別しようとしています

((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th)

解析のためにテキストの数字部分のみをキャプチャしたい。テキストが 21 番目の場合、21 をキャプチャして Integer に解析したいと考えています。パターンが存在するかどうかを理解し、特定のグループを取得するために、正規表現を照合する方法を知っています。値を抽出する式からの出力として一致したグループを取得する方法はありますか?

前もって感謝します

4

2 に答える 2

1

次のように、非キャプチャ グループを使用するように正規表現を書き換えることができます。

(?:(\\d*)(?:st|nd|rd|th))
于 2013-05-15T17:17:10.633 に答える
0

私はあなたの正規表現を単純化し、そして - 重要なことに - 両側にワイルドカードを追加しました。最初のワイルドカードには ? 21stたとえばの最初の桁を取り除く貪欲な一致を防ぐため

パターン/マッチャー アプローチでは、グループを抽出できます。

Pattern p = Pattern.compile(".*?(\\d*(1st|2nd|3rd|th)).*");
String input = "21st March 2013";
Matcher m = p.matcher(input);
if(m.matches())
    System.out.println(m.group(1));
于 2013-05-15T17:15:33.723 に答える