2012-11-30 55 views
-1

我有以下RegEx,應該與例如一些IDS括號:Java重複正則表達式

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

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

的目標是現在這種模式與「分裂」的「」結合起來,以適應串[swpf_02-7679, swpf_02-7622]不僅[swpf_02-7679]像上面張貼的正則表達式。

有人可以給我一個提示嗎?

+3

簡單拆分有什麼問題? –

+0

呃......分割後的字符串必須如下所示:[swpf_02-7679],[swpf_02-7640]。否則,我必須調整RegEx?! – sk2212

回答

1

,

+0

嗯,好吧。但是「[]」括號是一個條件。意味着該字符串看起來像[...,...]並且必須經過檢查以進行驗證。 – sk2212

+0

好的...我可以使用startsWith()和endWith。謝謝@Jimadilo – sk2212

0

爲什麼不使用Java StringTokenizer類,然後就使用這個令牌的正則表達式呢?您可以對它們進行後處理以包含您需要的括號或稍微修改正則表達式。

+2

來自您的鏈接: _StringTokenizer是一個遺留類,由於兼容性原因而保留,儘管在新代碼中不鼓勵使用它._ – Keppil

1

最簡單的方法來做你想做的事我認爲只是在前面和後面刪除'['和']'(使用String.subString()),然後用逗號分隔String.split()並對每個人使用正則表達式字符串如此返回(調整正則表達式去除括號當然)。

1

好只是刪除從字符串,然後split[],假設你想要的ID是像「swpf_02-7622」的位,然後分裂的逗號和環通遺體,隨你而去。有些東西就像

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

如果你想擺脫「swpf_」位,然後id.substring(5)。

最後,爲了擺脫方括號,使用id.startsWith('[')和id.endsWith(']')。

0

由於@was和@garyh已經提到最簡單的方法是刪除[],然後使用String.split(「\ s *,\ S *」)分割您的列表,然後使用您的模式匹配每個成員。

您也可以匹配多次使用起始位置作爲前一個迭代的結束位置的字符串:

模式P = .... //你的模式在捕獲括號() 匹配器M = 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. 
} 
+0

你的分割正則表達式似乎有一個錯字:''\\ s *,\\ S *「'應該是''\\ s *,\\ s *」'(小寫's'兩次)。另外,你的for循環相當於while(m.find())';你不需要自己跟蹤比賽的位置 –

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