2015-07-02 44 views
-1

我在檢查我的正則表達式是否與我的字符串匹配。 我有一個看起來像somename_somthing.txt的文件名,我想將它匹配到somename_*.txt,但是當我嘗試傳遞應該匹配的內容時,我的代碼失敗。這是我的代碼。我認爲我在C#中的正則表達式模式不正確

string pattern = "somename_*.txt"; 
Regex r = new Regex(pattern, RegexOptions.IgnoreCase); 
using (ZipFile zipFile = ZipFile.Read(fullPath)) 
{ 
    foreach (ZipEntry e in zipFile) 
    { 
     Match m = r.Match("somename_something.txt"); 
     if (!m.Success) 
     { 
      throw new FileNotFoundException("A filename with format: " + pattern + " not found."); 
     } 
    } 
} 
+0

我認爲這篇文章的標題並未反映問題。 –

+0

請推薦它應該是什麼,我會改變它。謝謝! – user1186050

回答

0

一般來說

正則表達式讓在這個代碼相匹配的_帶*的意思是零個或多個下劃線,而不是你的原意。 *用於表示零個或多個前一個項目。而不是嘗試

^somename_(.*)\.txt$ 

這與第一部分「somename_」完全匹配。

然後什麼(。*)

最後結束「.txt」。反斜槓轉義'點'。

更具體

你也可以說,如果你只想要字母而不是數字或符號在比賽中與中間部分:

^somename_[a-z]*\.txt$ 
-1

您好我覺得模式應該是

string pattern = "somename_.*\\.txt"; 

問候

+0

這不起作用。 –

+0

您也可以強制使用「^ somename _。* \\。txt $」的字符串「定位」 這將失敗「a_somename_something.txt」 – Pierre

+0

爲什麼你說它不起作用? – Pierre

0

星號與下劃線相匹配並將其丟棄。

嘗試:

somename_(\w+).txt 

的(\ w +),這裏將集團在這個位置匹配。

你可以看到它在這裏匹配:https://regex101.com/r/qS8wA5/1

0

書面,正則表達式

somename_*.txt 

匹配(在不區分大小寫):

  • 的文字文本somename,依次爲
  • 零個或多個下劃線字符(_),後跟
  • 任何字符(換行除外),其次
  • 的文字文本txt

它將在源文件中的任何地方匹配。你可能想要寫點類似於

Regex myPattern = new Regex(@" 
    ^  # anchor the match to start-of-text, followed by 
    somename # the literal 'somename', followed by 
    _  # a literal underscore character, followed by 
    .*  # zero or of any character (except newline), followed by 
    \.  # a literal period/fullstop, followed by 
    txt  # the literal text 'txt' 
    $  # with the match anchored at end-of-text 
    " , RegexOptions.IgnoreCase|RegexOptions.IgnorePatternWhitespace 
) ; 
相關問題