私はこの正規表現がうまくいくはずだと信じています:
"A\\d{6}_B\\d{6}_v\\d{1,3}\\.\\d{1,2}_.*?\\.xml"
丸括弧は必要ありません (ただし、そのままにしておくことができます)。この部分はorに一致しますが、 には一致しない(\\*?)
ため、間違っています。任意の文字だけでなくリテラルにも一致させたいため、代わりに , にする必要があります。A123456_B123456_v1.10_*
A123456_B123456_v1.10_
A123456_B123456_v1.10_File Name
.xml
\\.xml
.
丸括弧付きバージョン
"A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml"
それらの中で一致したものを取得したい場合にのみ必要です。
編集:
正規表現が機能しない理由は、Regex.IsMatch
間違って使用しているためです。MSDNによると、それは Regex.IsMatch(input, pattern) です
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");