2010-10-27 100 views
6

我確定有一個簡單的解決方案,但我似乎錯過了它。正則表達式C#問題

我需要一個正則表達式來做到以下幾點:

asdf.txt;qwer應符合asdf.txt

"as;df.txt";qwer應符合as;df.txt

正如你所看到的,我需要匹配的分號,但如果存在引號(當值中有分號)時,我需要在引號內匹配。由於我正在查找文件名,因此值中將不會有引號。

我的正則表達式的味道是C#。

感謝您的幫助!

+0

你能有引號內的轉義引號(如\」或‘’)? – 2010-10-27 17:29:57

回答

2
"[^"]+"(?=;)|[^;]+(?=;) 

這符合雙引號跟一個分號或文本後跟一個分號中的文本。分號不包含在比賽中。

編輯:實現我的第一次嘗試將匹配報價。以下表達式將排除引號,但使用子表達式。

"([^"]+)";|([^;]+); 
+0

我已經從來沒有使用過?= notation,它叫什麼,什麼風味支持它? – 2010-10-27 17:41:46

+1

它是'向前看等於'。它至少支持.NET和JavaScript。我最喜歡測試正則表達式的站點是http:// www .regexlib.com/RETester.aspx。它支持多種引擎,包括JavaScript和.NET。 – 2010-10-27 18:08:18

+1

你讓我走在正確的道路上,這裏是我選擇的正則表達式'(?<=「)?[^」] +(? =「?;)' – 2010-10-27 18:10:31

0

你需要使用正則表達式,你可以只使用C#字符串的方法包括:

string s = "asdf.txt;qwer"; 
string s1 = "\"as;df.txt\";qwer"; 

return s.Contains("asdf.txt"); //returns true 
return s1.Contains("\"as;df.txt\""); //returns true 
0

如果您正在尋找asdf.txt和兩個明確的字符串; df.txt這些可以然後只需成爲你的兩個正則表達式。所以如下所示。

Matches matches = Regex.Matches('asdf.txt;qwer',"asdf.txt"); 

Matches matches = Regex.Matches('"as;df.txt";qwer',"as;df.txt"); 

享受!

+0

他們不是那些特定字符串,它們可以是任何有效的文件名 – 2010-10-27 17:31:28

1

這應該做你:

(".*"|.*); 

它在技術上的分號匹配的爲好,但你可以砍其關閉或只使用反向引用(如果C#支持反向引用)

1

這將匹配到;如果沒有引號或引用文本後跟;如果有引號。

("[^"]+";|[^;]+;) 
+0

這場比賽將包括分號。 – 2010-10-27 18:11:27