2011-06-27 260 views
1

我不得不翻譯,如果在一個正則表達式語句,這樣我們就可以使用它在整個字符串翻譯這個if語句中的正則表達式

if (buffer[i] < 32 && !(buffer[i] == '\t' || buffer[i] == '\r' || buffer[i] == '\n')) 
    buffer[i] = ' '; 

,我做到了做這個

return Regex.Replace(base.ReadLine(), "[\0-\x08\x0B\x0C\x0E-\x1F]", " "); 
以下

但是我不喜歡它的外觀,是否有一種正則表達式可以完成我在if語句中做的同樣的事情? Basicly

[\0-\x1f]~[\t\r\b] 

~會去表示「排除以下」的東西(它不必是這個確切的語法,我只是想知道,如果有這樣的事?)

回答

1

取看看here - 它談論正則表達式的否定。我不確定它是否能夠直接幫助你,但是這是我獲得的最好成績。

0

要否定的東西,用[^ \噸\ r \ B]。您也可以嘗試negative lookbehinds,但前者更簡單恕我直言。

+0

是的,但[^ \ t \ r \ B]將匹配除3中的所有字符,我只希望它值32下的字符匹配期望那些3. –

+0

@Scott,您需要使用結合你的其他表情。儘管如此,我仍然覺得你可能會在這裏看到一個負面的後臺解決方案。你可以發佈你的示例文本,以便我可以嘗試更多? – Mrchief

+0

請看第一個代碼塊中的if語句,它顯示了您需要遵循的確切規則,但是我已經得到了答案,它是'(?![\ t \ r \ n])[\ x00- \ x1F]'使用負向預測 –

1

如果你不喜歡你的正則表達式的外觀,你可以使用類似/(?![\t\r\n])[\x00-\x1F]/。第一部分,(?![\t\r\n]),說失敗如果接下來的文字匹配[\t\r\n],然後第二部分[\x00-\x1F]說,以匹配任何字符< = 0x1F的。

+0

這是我在閱讀@Ken Wayne VanderLinde鏈接後最終使用的確切模式。 –