2016-09-17 33 views
1

我想知道一個非常簡單的事情:一個字符串以反斜槓結尾是或不是?微軟下的正則表達式

string bla = @"C:\"; 
if (! Regex.IsMatch(bla, "\b$")) { bla = bla + @"\"; } 

但它不工作。如果在字符串末尾沒有斜線,我想添加斜槓。我試了幾種方法,即使我只是嘗試匹配一個反斜槓,而無需它是在字符串的結尾,它的一個巨大的問題:

Regex.IsMatch(bla, "\b") // Not working 
Regex.IsMatch(bla, @"\") // Giving me and exception even! 
Regex.IsMatch(bla, @"\\$") // not working 

我跳出選項。如何....我可以匹配反斜槓與C#?

+0

您需要使用兩個反斜槓(如果您使用@)。由於反斜槓字符是一個特殊字符,因此您需要將它轉義出來 – Charleh

+1

我也試過,沒有工作......沒有任何效果。微軟sais我可以使用\ b,那也不管用。 – Saskia

+0

如果您使用路徑,查看[System.IO.Path](https://msdn.microsoft.com/en-us/library/system.io.path(v = vs.110).aspx)可能幫你。 – Filburt

回答

6

我想知道一個非常簡單的事情:一個字符串以反斜槓結尾 是或否。

那麼你不需要正則表達式...

string str = "your string here"; 
str.EndsWith(@"\"); // true or false 

如果你真想做雖然它的正則表達式的方式,你只需要確保你的正則表達式是正確的。這應該工作:

.*\\$ 

.* will match any optional leading characters 
\\ will match the '\' and has been escaped with another '\' 
$ will match until the end of your string. 
+0

結尾非常感謝!最後這個工作。然而,我仍然很好奇爲什麼Regex不在這麼簡單的任務上工作。 – Saskia

+0

查看我的更新評論。你的正則表達式無法工作,因爲它實際上是在搜索一個只包含反斜槓而沒有其他字符的字符串。在每種編程語言中,這都是無效的。你的字符串中還有其他字符,所以你的正則表達式也應該處理這些字符(如果是我的正則表達式:忽略它們)。 –

+0

是的,我也試過,開始。*即使我沒有使用「^」,但也沒有奏效。那麼我想我會忘記正則表達式,並在這個項目中儘量避免它。我對你的EndsWith選項非常滿意。 – Saskia

0

此致代碼不監守Regex.IsMatch有兩個參數的靜態方法工作..

public static bool IsMatch(string input, string pattern) 
{ 
    return new Regex(pattern).IsMatch(input); 
} 

所以,你應該給一個嘗試:

if (!Regex.IsMatch(bla, @".*\\$")) 
+0

對不起,這是一個錯字,當然我輸入了兩個選項,否則就不會編譯。我會更新這個問題以防萬一。無論如何,你的榜樣也沒有工作,我嘗試了一百萬件事情。我會盡量避免在Microsoft下完全使用正則表達式,但它不能按預期工作。 – Saskia

+0

'@「C:\」'是'「C:\\」' '@「。* \ $」'不正確,因爲parseRegex的最後一個字符丟失了 '@「。* \\」'是正確的因爲它將被翻譯爲在最後查找帶有兩個「\」的字符串 - 這是棘手的,雙字符編碼,一個用於C#字符串,另一個用於正則表達式字符串。 –

+0

只是出於好奇,我嘗試了你的建議,但它不匹配。如果你沒有指定「^」,它從字符串的開始處匹配也沒有意義。 – Saskia