-1

私は次の正規表現を持っています。これは、たとえば括弧内のいくつかのIDと一致する必要があります。

[swpf_02-7679, swpf_02-7622, ...]

Pattern p = Pattern.compile("[\\[\\s]*?[a-z]{1,8}[0-9]*?_[0-9]{2,}\\-[0-9]+[\\s]*?\\]");

目標は、このパターンを「、」の「split」と組み合わせて、上記の投稿された正規表現のように文字列に合わせる[swpf_02-7679, swpf_02-7622]だけではありません。[swpf_02-7679]

誰かが私にヒントを与えることができますか?

4

6 に答える 6

1

やりたいことを行う最も簡単な方法は、前後の「[」と「]」を削除し(を使用String.subString())、カンマで分割してString.split()、返された個々の文字列に正規表現を使用することです(調整します)。もちろん、ブラケットを削除するための正規表現)。

于 2012-11-30T15:29:47.533 に答える
1

文字列からとを削除し[てから、]split,

于 2012-11-30T15:31:48.483 に答える
1

さて、IDが「swpf_02-7622」のようなビットが必要だと仮定して、コンマで分割し、残りをループして、進むにつれてトリミングします。何かのようなもの

List<String> cleanIds = new ArrayList<String>();
for(String id : ids.split(","))
    cleanIds.add(id.trim());

「swpf_」ビットを削除する場合は、id.substring(5)を使用します。

最後に、角かっこをgitで削除するには、id.startsWith('[')およびid.endsWith(']')を使用します。

于 2012-11-30T15:33:24.627 に答える
0

リスト内のすべてのコードを単に抽出したい場合は、次の正規表現を使用できます。

[^,\s\[\]]+

次の文字列からすべての一致を取得します。

[swpf_02-7679, swpf_02-762342, swpf_02-7633  ,   swpf_02-723422]

次の結果が得られます。

swpf_02-7679
swpf_02-762342
swpf_02-7633
swpf_02-723422
于 2012-11-30T18:07:33.550 に答える
0

Java StringTokenizerクラスを使用してから、これから取得したトークンに正規表現を使用してみませんか?それらを後処理して、必要なブラケットを含めるか、正規表現を少し変更することができます。

于 2012-11-30T15:28:17.840 に答える
0

@wasと@garyhがすでに述べたように、最も簡単な方法は、削除してから[]、 `String.split(" \ s *、\ S * ")を使用してリストを分割し、パターンを使用して各メンバーを照合することです。

前の反復の終了位置として開始位置を使用して、文字列を複数回一致させることもできます。

パターンp=....//ブラケットをキャプチャするパターン() Matcherm= p.matcher(str);

for (int start = 0; m.find(start); start = m.end()) {
    String element = m.group(1);
    // do what you need with the element.
}
于 2012-11-30T15:40:14.270 に答える