2016-05-17 54 views
1

我試圖用正則表達式來拆分EDIFACT線。在EDIFACT中,一​​行的組成部分由一個標記分隔,通常爲「+」。 「+」可以通過在「?」前面加以區分。我可以使用表達式來實現這一點分割字符串,除非令牌逃過一劫,但忽略逃脫轉義字符

(?<!\?)\+ 

到目前爲止這麼好。然而,轉義字符本身可以通過加倍(「??」)來逃脫。這裏有一些例子和輸出時分裂

ABC+DEF+GHI => ABC, DEF and GHI  (3 elements) 
ABC?+DEF+GHI => ABC?+DEF and GHI  (2 elements) 
ABC??+DEF+GHI => ABC??, DEF and GHI (3 elements) 

這是我正在努力的第三個。我將如何調整我用來表現的表情?可以逃脫實體

+0

可以'???','''? –

+1

您可以使用['(?:[^?+] | \ ?.)+'](https://regex101.com/r/hP7eA6/1)來匹配子字符串。 –

+0

好點Giorgi,你說得對,它應該處理重複的轉義字符。 Wiktor的解決方案處理這個問題。 –

回答

2

字符串不能與基於環視,正則表達式進行分割。相反,匹配是一種更可靠的方法:匹配所有不是轉義序列的子字符串,而不是分隔符,然後匹配那些。

(?:[^?+]|\?.)+ 

參見regex demo

(?:[^?+]|\?.)+模式匹配比?+或的字面?接着與任何字符(但沒有DOTALL改性劑換行符)的序列的其它1+字符。

+1

謝謝Wiktor,看起來正是我需要的。花了我一段時間才明白它是如何處理重複逃跑的。即,ABC ?? + DEF = 2令牌,ABC ??? + DEF = 1令牌,ABC ???? + DEF = 2令牌等,但我看到了\ ?.將吞下任何以「?」開頭的字符對。很好謝謝 –