2013-02-19 13 views
1

我有一組非常複雜的差異,我需要考慮。編寫一個匹配它們的正則表達式,或者用Java編寫單個的正則表達式,然後在if-then塊中測試每個正則表達式會更好嗎?在正則表達式和Java中匹配倍數

我甚至不上來與正規快件,將每一種情況下匹配,因此也許一個有爭議的問題:

這裏是輸入:

  • CN666SEEEI
  • FOC000007HW(2190000002)
  • FHK10AAAAAA(2850000004)
  • JAB031444BA(3108888022)
  • S/N JAE14445WW7
  • 串行:FOC0818S08R型號:CISC
  • 序列號:FHK10HHHQ4
  • 型號:CISCO7200VXR,SN:
  • 思科CISCO3845 SN:FGL15555532
  • CISCO2831 FHK13XXXX1E
  • CISCO1851 SN:FHK1XXXX55M
  • CISCO2821 SN:FHK1333F11J
  • CISCO2921/K9,SN:FHK1444FF7F
  • 思科1941/K9錫:FHK13HHHTQ
  • CISCO2121 SN:FHKFFFFFFEY
  • WS-C2970-24TC-L,SN:FOCXXXXZ34K
  • WS-C3760-24TS-S,SN:FDOXXXXX0F6

現在我需要提取出序列號 - 真正的第一行是最簡單的形式,其餘的是隱藏內的字符串。最後一個是完全無效的,應該匹配。

回答

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()); 
} 

我以爲你意味着最後一個應該匹配。

+0

holy#* $#我認爲沒有辦法編寫一個正則表達式來覆蓋它們。 – awm 2013-02-19 22:59:29

1

我會將字符串拆分成不同的組,並根據初始分組對它們應用不同的模式。

第一組可能很簡單,如str.contains(":")即該字符串包含分號。然後再進一步分解,下一個小組是否包含「Cisco」這個詞。在將這個列表分解成更容易處理下面的子列表之後,爲每個子列表編寫正則表達式會容易得多。

不具有 'SN' 或 ':' 或 '思科'

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

然後進一步打破下來 -

包含 ''(空格):

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

不 -

CN666SEEEI 

這兩個gr oups甚至不需要正則表達式,你只需在分割後提取正確的位。

使用提供的示例來分解您的列表並將簡單的正則表達式應用於每個列表!