2012-11-05 26 views
1

我想正則表達式匹配模式在具有追蹤圖形文本文件中的所有行:正則表達式線是配襯模式

TcQuery {dynamic_content} Alias "{dynamic_content}" New 

如果文本文件有以下兩行:

//tcquery c_query alias "qrybklog" new   <= This one shouldn´t be found because there is two backslashes before TcQuery. 

tcquery c_query alias "qrybklog" new    <= I want a pattern to match this line 

從來就試過,但兩條線相匹配:

 var prw = System.IO.File.ReadAllText(@"d:\backlog.prw", Encoding.ASCII); 

     prw = "//TcQuery c_query Alias teste1 new"; 
     prw = "\nTcQuery c_query Alias teste2 new"; 
     prw = "\nTcQuery c_query Alias teste3 new"; 
     prw = "\n//TcQuery c_query Alias teste4 new"; 
     var regexTcQuery = new Regex("TcQuery+[ *]+[0-9a-zA-Z_]+[ *]+alias+[ *]+[0-9a-zA-Z_\"]+[ *]new$", RegexOptions.IgnoreCase); 

     var resultTcQuery = regexTcQuery.Matches(prw); 
+0

行中是否允許有任意數量的空白(包括開始時,詞彙標記之間和結束時)? – itsbruce

+0

匹配模式,而不是...什麼? – djechlin

回答

6

使用singleline以及與此正則表達式ignorecase選項

(?<!\/\/)\s*?\btcquery\b(.*?)\balias\b.*?new 

(?<!\/\/)檢查//之前tcquery

.*?是懶洋洋地匹配0許多characters.If您使用.*那麼它會匹配最後tcqurey跳過tcquery匹配

\bnon-word分界線。這允許我們如果您想獲得c_query文本,你可以做到這一點

List<string> lst=Regex.Matches(input,@"(?<!\/\/)\s*?\btcquery\b(.*?)\balias\b.*?new").Cast<Match>().Select(x=>x.Groups[1].Value).ToList(); 
+0

但在某些情況下,在tcquery – will

+0

@之前會有選項卡和空格,我將包含該部分 – Anirudha

+0

prw + =「// TcQuery c_query Alias \」teste1 \「new」; prw + =「\ nTcQuery c_query Alias \」teste2 \「new」; var regexTcQuery = new Regex(@「^ \ s * \ btcquery \ b。* \ balias \ b。* new \ s * $」,RegexOptions.IgnoreCase);沒有找到匹配項。 – will

2

如果你想匹配的全系列(不含任何子組),你不需經過d使用:

^tcquery.*$ 

^指示文本從字符串的開始處開始;因爲tcquery是緊隨其後的文本,所以以//開頭的行將被忽略。

如果有是tcquery之前的任何空格,您可以用\s*匹配此:

^\s*tcquery.*$ 

如果你有一個可以與tcquery開頭,但不一定遵循您指定的格式線,您可以更新與圖案:

^\s*tcquery.*alias.*new.*?$ 

爲了匹配線(S)成組的「動態」的內容部分,應該能夠使用:

^\s*tcquery\s+(.*)\s+alias\s+"(.*)"\s+new.*?$ 

另外,值得注意的是,您應該爲每個上述示例啓用ignore-case regex選項。

+0

但在某些情況下,在tcquery – will

+0

@will之前會有一些製表符和空格@will用'\ s *'更新以匹配空格。 – newfurniturey

0
([^\/\/])tcquery (.*) alias \"(.*)\" new$/i 
匹配不同的詞

\s比賽0many空間可以是任何的[\n\r\t\f]


如果您的語言不支持/ i無匹配匹配,則將正則表達式切換爲:

([^\/\/])TcQuery (.*) Alias \"(.*)\" New$ 
+0

啊,現在的C#標籤被添加,這個答案可能沒有幫助。 – Novocaine

0

試試這個:

^tcquery [^ ]+ alias "[^"]+" new 

它是一個業餘的一個更主要的想法是,行必須以tcquery開始。