2つの-
の間にあるすべての数字を抽出したいと思います。デリミネーター間の数字のみを抽出する方法は?
例:
test-555-2468-123
抽出するために、所望の結果:[\d+]+
を:
555
2468
次のように、私は正規表現を使用してみました。これは少なくともブロック内のすべての数字を私に与えます。しかし、どのようにして数字にプリフィックスとポストフィックスしなければならないという制限を-
文字で追加することができますか?
2つの-
の間にあるすべての数字を抽出したいと思います。デリミネーター間の数字のみを抽出する方法は?
例:
test-555-2468-123
抽出するために、所望の結果:[\d+]+
を:
555
2468
次のように、私は正規表現を使用してみました。これは少なくともブロック内のすべての数字を私に与えます。しかし、どのようにして数字にプリフィックスとポストフィックスしなければならないという制限を-
文字で追加することができますか?
:Javaコードで
(?<=-)\d+(?=-)
を:
final Pattern p = Pattern.compile("(?<=-)\\d+(?=-)");
(?<=-)
- 正後方参照をそれが以前主張しますポジションにはハイフンが付きます(?=-)
- 肯定先読みは、次の位置は、これは少し正規表現を使用するソリューションであると(私は推測)より簡単ハイフンjavaの正規表現とルックアサウトについて読むには良いソースですか? –
ルックアラウンドのためにこれを読んでください:http://www.regular-expressions.info/lookaround.htmlそうでなければhttp://www.regular-expressions.info/は正規表現を学ぶためにたくさんのおいしさを持っています – anubhava
ありがとうございました! :) –
を持って主張します。
String str = "test-555-2468-123";
// converting the split array into an array list
ArrayList<String> list = new ArrayList<>();
Arrays.stream(str.split("\\-")).forEach(list::add);
// ensure that there must be a "-" before and after by removing the first and last element
list.remove(0);
list.remove(list.size() - 1);
// filter the elements that contains only numbers
list.stream().filter(x -> Pattern.compile("\\d+").matcher(x).matches()).forEach(System.out::println);
なぜ正規表現パターンマッチャーが使用されていても、あらかじめ分割する必要がありますか? – membersound
これはもっと簡単な解決策だと思っていました。splitを使って '='が両側に存在するようにしました。私はいつも読みにくい正規表現を見つけました。 @ mememsound – Sweeper
' - (\ d +) - 'を使用し、最初に取得したグループの値を抽出します。 – Tushar
これは私に '555'を与えるだけです。しかし、私はすべてのグループが必要です。 – membersound
すべてのグループを取得するために 'while(matcher.find())'を使用してください –