2010-04-07 68 views
0

我的字符串裝飾這樣如何處理通過正則表達式這個字符串

expression1/field1+expression2*expression3+expression4/field2*expression5*expression6/field3 

一個真正的風格mybe這樣的:

computer/(100)+web*mail+explorer/(200)*bbs*solution/(300) 

「+」和「*」代表運營商 「計算機」 ,「web」...表示表達式 (100),(200)表示字段num。字段num可能不存在。

我想要的字符串處理這樣:

<computer>/(100)+web*<mail>+explorer/(200)*bbs*<solution>/(300) 

規則這樣

如果表達式長度大於3及其字段不是(200),然後添加括號到它。

+1

舉些例子。一些有用的。 – polygenelubricants 2010-04-07 10:13:32

+0

@iiduce,假設你的頭像不是你現在看起來的樣子,請嘗試像長大一樣寫。 :) – 2010-04-07 10:20:50

+0

爲什麼不把'explorer'括起來?爲什麼是'解決方案'? – polygenelubricants 2010-04-07 10:33:11

回答

0

我的建議是將正則表達式與其他語言功能混合使用。併發症來自於field出現在expression之前的事實,並且後視通常比前瞻更有限。

在僞Java的代碼,我建議做這樣的事情:

String[] parts = input.split("/"); 

for (int i = 0; i < parts.length; i++) { 
    if (!parts[i].startsWith("(200)")) 
    parts[i] = parts[i].replaceAll("(?=[a-z]{4})([a-z]+)", "<$1>"); 
} 

String output = parts.join("/"); 
+0

不錯。我用過它 – iiduce 2010-04-08 02:38:30

0

我不會用只是正則表達式。

你說:「如果表達式長度大於3及其字段不是(200),然後加括號它」

我認爲一個正常的條件語句是我們的最佳和最清晰的solutoion。

我認爲正則表達式有時會被濫用。正則表達式很難閱讀,當一對條件語句可以做同樣的事情,但更清楚時,我會說代碼質量更高。

+0

我不同意正則表達式被過度使用/難以閱讀。之所以不適合這裏的原因是因爲'field'出現在'expression'之前,並且括起來,而且往後看往往比lookforward更有限。如果'field'出現在'expression'的末尾,這實際上非常簡單,正則表達式非常可讀。 – polygenelubricants 2010-04-07 10:38:21

相關問題