2011-06-14 59 views
2

我想一個特定的字符串(Token例如)通過與另一個替換正則表達式前添加一個空格:somethingToken應該成爲something Tokensomething Token應該留 something Token_ 而不是 something Token(與2個空格)正則表達式錨否定的匹配和字符串

我很難找到一個匹配非空格字符,然後令牌的正則表達式,但不包括匹配的非空格字符(否則它將被替換)。 一個(失敗)的嘗試是試圖否定一個\b錨點(它應該匹配單詞的開頭),但我不知道是否可以否定錨點。 對此的任何幫助表示讚賞。 謝謝。

+2

您正在使用哪種語言? – morja 2011-06-14 21:27:37

+0

我使用的是Java,但它應該儘可能地像語言不可知的那樣。 – Eugen 2011-06-15 19:23:47

回答

3

我剛找到這個問題的答案,也許這將是對別人有用:

\BToken 

它代表一個否定詞邊界,所以基本上是匹配的地方標準字邊界(\ b)不比賽。對於我的例子,它確實匹配somethingToken但不是東西令牌這是保持原樣。

+0

那麼你是如何決定讓(令牌)原子的? (對於未來的讀者)。顯然你不想取代整個令牌,對吧? – 2011-06-14 21:48:29

+0

在我的情況下,我沒有必要確定令牌是否是原子的(我確定它是基於我正在使用的文本類型)。但是如果您需要確定更通用的實用程序方法,則可以使用另一個字邊界(此時不是否定的) - \ b。至於替換,是的,我確實想用「Token」替換「Token」 – Eugen 2011-06-15 21:41:52

0

(?<!\u0020)(?=Token)

這將向後看一個非空格,然後將前瞻令牌,但沒有寬度。這樣你可以用空格替換這個匹配。

編輯︰如果你需要它在Javascript中工作, \u0020?(?=Token) 使空間可選,那麼你將替換空間沒有淨變化。

+0

負向lookbehind語法是'(?<!pattern)'。 '(?!pattern)'是一個負面的前瞻。 – 2011-06-14 21:39:24

+0

謝謝!我會解決它。 – 2011-06-14 21:42:09