2010-11-16 36 views
3

鑑於字符串:怎麼辦正則表達式匹配與引號的字符串在C#

/home "1020....2010" main 

我想home10202010使用正則表達式,但保留具有報價的問題。誰能幫我嗎?


謝謝你們爲您的文章。我意識到我的代碼可能有一些問題。這裏是

string pattern [1] = @「blablabla」; string pattern [2] = @「blablabla」; ......

的foreach(字符串s圖案){ 如果(regex.match(線,S).success){ ...... } }

然後有錯誤,說意外的字符 「\」

+2

該報價有什麼樣的問題?你不能在沒有捕獲報價的情況下匹配它嗎? – jball 2010-11-16 20:05:19

回答

6

使用模式:

/(\w+)\s+"(\d+)\.+(\d+)" 

而且home(或/後的任何其他名稱)將在$1,在$2第一號和$3最後一個數字。

編輯1

我認爲@應該工作,但不能得到它來編譯ideone.com。然而,這確實工作:

using System; 
using System.Text.RegularExpressions; 

public class RegexTest 
{ 
    public static void Main() 
    { 
     Regex r = new Regex("/(\\w+)\\s+\"(\\d+)\\.+(\\d+)\""); 
     Match m = r.Match("/home \"1020....2010\" main "); 
     Console.WriteLine("$1 = " + m.Groups[1]); 
     Console.WriteLine("$2 = " + m.Groups[2]); 
     Console.WriteLine("$3 = " + m.Groups[3]); 
    } 
} 

生產:

$1 = home 
$2 = 1020 
$3 = 2010 

試驗檯:http://ideone.com/TpQwf

EDIT 2

由於@Seattle在評論中提到的,使用便捷@時在正則表達式字符串之前,雙引號需要在前面加一個雙引號來避開它(不是一個反斜槓!):

Regex r = new Regex(@"/(\w+)\s+""(\d+)\.+(\d+)"""); 
+0

謝謝,但它一直告訴我錯誤「意想不到的字符」\「」 – Mavershang 2010-11-16 20:16:29

+4

「@」符號要求引號以不同的方式轉義。 '@「/(\ w +)\ s +」「(\ d +)\。+(\ d +)」「」' – 2010-11-16 20:25:57

+0

@Seattle,歡呼! – 2010-11-16 20:27:12

0

針對上述情況,你想要的東西,如:

/(\w+) "(\d+)\.+(\d+)" (\w+) 

而且檢查:

+0

爲什麼要從報價中創建一個字符類?你不想分組'\ w +'和'\ d +'匹配嗎? – 2010-11-16 20:08:17

+0

@Bart你是對的,更正了。謝謝! – 2010-11-16 20:13:54

+0

當然歡迎您!請注意,在OP的例子中,'home'後面有多個空格。如果你解決了這個問題,你會複製我的答案。 :) – 2010-11-16 20:14:34

0

如果你想匹配一個引號字符(或其他特殊字符),你可以用一個反斜槓轉義。所以你的正則表達式中的\"會匹配一個「字符」

相關問題