2014-08-30 54 views
1

我有一個字符串包含'||'和'|'我只想在'|'上標記它雙管道字符存在時在管道上的字符串標記化

例如:

|A||This is some string|B||This is some other String 

應標記化到

[A||This is some string, B||This is some other String] 

我一直在使用val.tokenize('\\|')嘗試,但並沒有給我這tokenises的「||」所期望的結果,即我得到:

[A, This is some string, B, This is some other String] 

我在做什麼錯了?

謝謝。

PS:我使用Groovy

回答

2

您可以使用lookaround斷言。

def s = '|A||This is some string|B||This is some other String' 
def m = s.split('(?<!\\|)\\|(?!\\|)') 
println m.findAll {it != ''} 

雖然它的短做:

def m = s.findAll('[^|]+\\|{2}[^|]+') 
assert m == ['A||This is some string', 'B||This is some other String'] 

輸出

[A||This is some string, B||This is some other String] 
+0

謝謝,這是按照預期工作的。我真的不知道如何查找斷言,所以也要感謝這些信息! – zeiger 2014-08-30 05:47:41

1

你可以使用這個表達式:

(?<!\|)\|(?!\|) 

Working demo

請記住,使用雙反斜線爲:

(?<!\\|)\\|(?!\\|) 

enter image description here

+0

'\ B \ | \ B'不會匹配'| A'。也許'^ \ | \ b | \ b \ | \ b | \ b \ | $'? – 2014-08-30 05:31:03

+0

@AdamSmith你是對的。我剛剛修好了。謝謝你 – 2014-08-30 05:38:10