2012-01-19 36 views
1

我一直未能找到涵蓋我的具體問題的任何示例。我正在使用.NET C#正則表達式庫。我必須解析使用長布爾表達式和他們自己的格式的傳統文件結構。我現在需要用其他文本替換特定的標識符號碼,並且我無法匹配工作。帶有()&|〜的布爾表達式的正則表達式作爲運算符和石斑魚標識符在不同位置

例如我需要匹配以下類型的案例中的數字1。 「1」| 「1 & 2」| 「2 | 1」| 「3 &(1 | 2)」| 「 」(3 | 1)& 2「

但不符合: 」11「| 「2 & 11」| 「11 | 3」

而且我寧願匹配它只是確切的數字,沒有任何額外的空格或PARAMS。我希望能用一種表達方式來完成。我只是想用多個表達式和正則表達式來替代它。任何古魯都知道如何做到這一點?

回答

1

下面的正則表達式,使用先行和回顧後,應該對你的例子做。

//regex expression (the important part) 
var regex = new Regex(@"(?<!\d)1(?!\d)"); 

//test input 
var input1 = "\"1\" \"1 & 2\" \"2 | 1\" \"3 & (1 | 2)\" \"3(| 1) & 2\""; 
var input2 = "\"11\" \"2 & 11\" \"11 | 3\""; 

//replace and print result 
Console.WriteLine(regex.Replace(input1, "NEW")); 
Console.WriteLine(regex.Replace(input2, "NEW")); 

// Output: 
// "NEW" "NEW & 2" "2 | NEW" "3 & (NEW | 2)" "3(| NEW) & 2" 
// "11" "2 & 11" "11 | 3" 

這實質上意味着「捕獲所有1,不直接位於數字之後」。

有關前瞻/向後斷言更多的信息,看看這個頁面:http://www.regular-expressions.info/lookaround.html

+0

這是完美的,謝謝! –

0

要匹配只是「1」本身,而不是另一種價值的一部分,你也許可以用這樣的:

var regex = new Regex(@"\b1\b"); 

匹配詞邊界之前和之後的「\ b」(從單詞到非單詞字符或反之亦然)的匹配。根據你的例子,上述將起作用。