2013-03-01 18 views
1

我必須看起來像這樣的文件名:正則表達式匹配的文件名

A123456_B123456_v1.10_File Name.xml 

我試圖創建如果文件名匹配,應驗證一個正則表達式。

的模式是:

Regex regex = new Regex("A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(\\*?).xml"); 

這是行不通的。

你能解決這個問題嗎?

工作實例

string fileName = "A545656_B958432_v12.8_Upload 1.xml"; 

Regex.IsMatch("A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml", fileName) 
+3

如何用'。*?'替換'(\\ *?)'?你現在正在匹配一個文字'*',這不是你想要的(我猜) – Nolonar 2013-03-01 12:11:08

+1

http://www.regexper.com/ - 這是有史以來最好的事情。 – 2013-03-01 12:13:32

+1

你也想逃避最後一段時間 - '\ .xml' – Lloyd 2013-03-01 12:15:51

回答

1

我相信這個正則表達式應該工作:

"A\\d{6}_B\\d{6}_v\\d{1,3}\\.\\d{1,2}_.*?\\.xml" 

圓括弧是沒有必要的(雖然你可以離開他們,因爲他們是),該(\\*?)部分錯誤,因爲它匹配A123456_B123456_v1.10_*A123456_B123456_v1.10_,但不是A123456_B123456_v1.10_File Name,而.xml應該是\\.xml,因爲您需要一個文獻l .匹配,而不是任何字符。只有當你想檢索任何已在其內部匹配

版本與圓括弧

"A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml" 

是必要的。

編輯:

你的正則表達式是不工作的原因,是因爲你使用Regex.IsMatch錯誤。據MSDN,它的Regex.IsMatch(輸入模式)

Regex.IsMatch("A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml", fileName) // instead of this 
Regex.IsMatch(fileName, "A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml") // do this instead 

因爲你正在做

Regex regex = new Regex("A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml"); 

你爲什麼不使用它呢?

if (regex.IsMatch(fileName)) 
    // do stuff 

編輯2:

而不是使用雙轉義,你可以讓你的正則表達式更容易閱讀使用逐字字符@

Regex regex = new Regex(@"A(\d{6})_B(\d{6})_v(\d{1,3}\.\d{1,2})_(.*?)\.xml"); 
+0

我試過了,不工作:( – Catalin 2013-03-01 12:21:30

+0

愚蠢的我!我還沒有意識到這是所有!我在調試器中測試它,並且我不想在每次修改正則表達式時編譯該項目 – Catalin 2013-03-01 12:35:05

+0

只需使用逐字字符串文字即可擺脫所有雙重轉義。 – Joey 2013-03-01 12:41:00

0

即使世界做的更清潔的方式它比這,但它會工作。

private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     string Reg = "^[A]{1}[0-9]{6}[_]{1}[B]{1}[0-9]{6}[_]{1}[v]{1}[1]{1}[.]{1}[1]{1}[0]{1}[_]*"; 

     if (Regex.IsMatch(textBox1.Text, Reg)) 
     { 
      textBox1.BackColor = Color.Green; 
      textBox1.ForeColor = Color.White; 
     } 
     else 
     { 
      textBox1.BackColor = Color.White; 
      textBox1.ForeColor = Color.Black; 
     } 
    } 
+0

不檢查是否以.xml結尾。我知道我可以單獨檢查,但我寧願在這裏做 – Catalin 2013-03-01 12:29:12