我可能需要一些關於正則表達式的問題的一些幫助,並希望提前感謝任何幫助。正則表達式來分割一個字符串,但考慮多位數轉義序列
我必須用另一個字符串分割一個字符串,我把它稱爲分隔符。但是,如果轉義序列優先於separatorString,則此時不應該拆分字符串。轉義序列也是一個字符串,讓我叫它escapeSequence。
也許是最好先從一些例子
separatorString = "§§"; escapeSequence = "###"; inputString = "Part1§§Part2" ==> Desired output: "Part1", "Part2" inputString = "Part1§§Part2§§ThisIs###§§AllPart3" ==> Desired output: "Part1", "Part2", "ThisIs###§§AllPart3"
搜索計算器,我發現Splitting a string that has escape sequence using regular expression in Java和正則表達式
"(?<!(###))§§"
上來。
這基本上是說,如果找到「§§」,匹配,除非它前面有「###」。
這正常工作與Regex.Split對於上面的例子,但是,如果inputString是"Part1###§§§§Part2"
我收到"Part1###§", "§Part2"
,而不是"Part1###§§", "Part2"
。
我明白爲什麼,因爲後面的字符是「##§」而不是「###」,因爲第二個「§」給出匹配。我嘗試了幾個小時來修改正則表達式,但結果變得更糟。有人有想法嗎?
哇,非常感謝您提供的快速回答和解釋。你的答案可能會訣竅,雖然我不太確定它是否能夠應付這樣的問題:「Part1 ###§§§§§§」。我可能需要像這樣的結果「Part1 ###§§,」「」,「但是我需要一些日子才能回到這個問題,但我會,再見所有;) – user541727 2010-12-14 17:52:51
取決於你的意思是」應對「,你可能希望讓$$成爲先前令牌的一部分,或者你可能希望$$$$表示一個空的令牌,我所提出的建議規定令牌以大寫的字母數字開頭,如果你有不同的規定,那麼你將不得不使用不同的正則表達式 – Cheeso 2010-12-14 18:23:38
'(?<!###)§§'的問題是它會匹配'###§§§'中的最後兩個字符。使用'(###§§|。)*'之類的東西更加穩固,或者,如果你可能用'###'來逃避其他角色,你可以使用'(###。{2} |。)。 *'。 – eyelidlessness 2010-12-14 18:57:08