我的文件名必须如下所示:
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)
答案 0 :(得分:1)
我相信这个正则表达式应该有效:
"A\\d{6}_B\\d{6}_v\\d{1,3}\\.\\d{1,2}_.*?\\.xml"
圆括号不是必需的(虽然你可以保留它们),(\\*?)
部分是错误的,因为它与A123456_B123456_v1.10_*
或A123456_B123456_v1.10_
匹配,但不是{{1}并且A123456_B123456_v1.10_File Name
应该是.xml
,因为您希望文字\\.xml
匹配,而不仅仅是任何字符。
带圆括号的版本
.
只有当你想要检索其中匹配的内容时才需要。
修改强>
您的正则表达式无法正常工作的原因是因为您使用了"A(\\d{6})_B(\\d{6})_v(\\d{1,3}\\.\\d{1,2})_(.*?)\\.xml"
错误。根据{{3}},它是Regex.IsMatch(输入,模式)
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");
编辑2:
使用逐字符if (regex.IsMatch(fileName))
// do stuff
@
答案 1 :(得分: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;
}
}