1

考慮しなければならない非常に複雑な一連の差異があります。それらすべてに一致する正規表現を作成するのと、Java で個々の正規表現を作成して if-then ブロック内でそれぞれをテストするのとではどちらがよいでしょうか?

すべてのケースに一致する正規表現を思いつくことさえできないので、それはおそらく論点です:

入力は次のとおりです。

  • CN666SEEEI
  • FOC000007HW (2190000002)
  • FHK10AAAAAA (2850000004)
  • JAB031444BA (3108888022)
  • S/N JAE14445WW7
  • シリアル : FOC0818S08Rモデル : Cisc
  • シリアル番号: FHK10HHHQ4
  • モデル:CISCO7200VXR、SN:36555555
  • Cisco CISCO3845 SN: FGL15555532
  • CISCO2831 FHK13XXXX1E
  • CISCO1851 SN: FHK1XXXX55M
  • CISCO2821 SN: FHK1333F11J
  • CISCO2921/K9、SN: FHK1444FF7F
  • Cisco 1941/k9 Sn: FHK13HHHTQ
  • CISCO2121 SN: FHKFFFFFFEY
  • WS-C2970-24TC-L、品番: FOCXXXXZ34K
  • WS-C3760-24TS-S、品番: FDOXXXXX0F6
  • 38 42 42 42 42 42 42 44 42 42

ここで、シリアル番号を抽出する必要があります。実際には、最初の行が最も単純な形式で、残りは文字列内に隠されています。最後のものは完全に無効であり、一致するはずです。

4

2 に答える 2

2

これは、与えられた例で機能します。

ただし、「非常に複雑な分散のセット」は、完全なソリューションのために詳細に概説する必要がある場合があります。

String str = "CN666SEEEI\n" +
    "FOC000007HW (2190000002)\n" +
    "FHK10AAAAAA (2850000004)\n" +
    "JAB031444BA (3108888022)\n" +
    "S/N JAE14445WW7\n" +
    "Serial :FOC0818S08R Model : Cisc\n" +
    "Serial_Number: FHK10HHHQ4\n" +
    "Model:CISCO7200VXR, SN:36555555\n" +
    "Cisco CISCO3845 SN: FGL15555532\n" +
    "CISCO2831 FHK13XXXX1E\n" +
    "CISCO1851 SN: FHK1XXXX55M\n" +
    "CISCO2821 SN: FHK1333F11J\n" +
    "CISCO2921/K9, SN: FHK1444FF7F\n" +
    "Cisco 1941/k9 Sn: FHK13HHHTQ\n" +
    "CISCO2121 SN: FHKFFFFFFEY\n" +
    "WS-C2970-24TC-L, SN: FOCXXXXZ34K\n" +
    "WS-C3760-24TS-S, SN: FDOXXXXX0F6\n" +
    "38 42 42 42 42 42 42 44 42 42";

Matcher m = Pattern.compile( "\\b(?!CISCO)[A-Z\\d]{8,}(?=\\s|$)" ).matcher( str ); 

while ( m.find() ) {
    System.out.println( m.group() );
}

最後のものが一致してはならないという意味だと思いました。

于 2013-02-19T22:46:03.920 に答える
1

文字列をさまざまなグループに分割し、その最初のグループ化に基づいてさまざまなパターンを適用します。

str.contains(":")最初のグループは、文字列にセミコロンが含まれているような単純なものにすることができます。次に、これをさらに細かく分類します。この次のグループには「Cisco」という単語が含まれていますか。そのリストを以下のように扱いやすいサブリストに分割すると、それぞれの正規表現を作成するのがはるかに簡単になります。

「SN」または「:」または「Cisco」がありません

CN666SEEEI
FOC000007HW (2190000002)
FHK10AAAAAA (2850000004)
JAB031444BA (3108888022)

次に、これをさらに分解します-

''(スペース)を含む:

FOC000007HW (2190000002)
FHK10AAAAAA (2850000004)
JAB031444BA (3108888022)

ではない -

CN666SEEEI

これらの2つのグループは正規表現さえ必要とせず、分割後に適切なビットを抽出するだけです。

提供されている例を使用してリストを分類し、それぞれに単純な正規表現を適用してください。

于 2013-02-19T21:57:29.610 に答える