我相信這個正則表達式應該工作:
"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");
如何用'。*?'替換'(\\ *?)'?你現在正在匹配一個文字'*',這不是你想要的(我猜) – Nolonar 2013-03-01 12:11:08
http://www.regexper.com/ - 這是有史以來最好的事情。 – 2013-03-01 12:13:32
你也想逃避最後一段時間 - '\ .xml' – Lloyd 2013-03-01 12:15:51