2011-07-06 20 views
13

我想這個表達式匹配:如何使用C#的正則表達式匹配一行的開始或結束?

^COMA1TA2000,.*$ 

有這樣的文字:

# Qualquer linha iniciada por # será ignorada 
# Caracteres que não podem serem usados na nomenclatura das copiadoras ou modelos. 
# & < > " ' 
COMA1TA2000,ta-2000,hd,COMB1 
#COMA2TA2000,ta-2000,hd,COMB2 
#COMA3TA2000,ta-2000,hd,COMB3 

我能做到這一點使用Notepad++,但我不能與C#Regex類。

content = sr.ReadToEnd(); 
string pattern = "^COMA1TA2000,.*$"; 
if(Regex.IsMatch(content, pattern)) 
System.Windows.Forms.MessageBox.Show("Test"); 

我錯過了什麼?

+0

只是要清楚,你的'IsMatch'線返回false? –

回答

0

使用File.ReadLines而不是ReadToEnd方法並在每行上應用正則表達式。

你現在在做什麼,正在讀取整個文本作爲一個文本塊,MultiLine選項有時會把事情弄糟(因爲在不同的操作系統中有不同的CRLF字符等等)。

我的建議是這樣的:

string[] lines = File.ReadAllLines("path to your text file"); 
Regex regex = new Regex("^pattern$"); 
foreach (string line in lines) 
{ 
    Match match = regex.Match(line.Trim()) 
    if (match.Successful) 
    { 
     // have your match here. 
    } 
} 
+0

這是一個不錯的主意,我會在下一個項目中記住這一點。但對於這個問題,第一個答案是正確的。 – MaikoID

10

或者設置多選項的正則表達式(?m)(?m)^COMA1TA2000,.*$

+1

在我只能訪問.net正則表達式的環境中,而不是創建並運行它們的代碼的環境中 - 我以爲我運氣不佳,因爲它好像設置多行選項對於我正在嘗試執行的操作是必需的。這完全有效!學到了一些新穎而漂亮的東西。 :) – neminem

+0

@neminem,歡迎:) –

相關問題