正则表达式匹配文件名

时间:2011-09-09 15:17:43

标签: regex

我正在处理一个简单的问题。

我有一个Cognos报告,在文件夹中留下两个文件,之后接口必须根据文件名选择其中一个文件才能开始运行。

报告进程要求用户为报告设置名称。对于前者如果我选择名称PaymentJournal06.09,则会创建以下文件:

PaymentJournal 06.09-en-us-xml_desc.xml
PaymentJournal 06.09-en-us.xml

我需要一个正则表达式来仅获取第二个文件。我尝试使用PaymentJournal*-en-us.xml,但它不起作用。

2 个答案:

答案 0 :(得分:6)

使用正则表达式*不是您习惯使用的通配符,而是一个意义为零或更多的量词。所以在你的例子中:

PaymentJournal*-en-us.xml

l*表示零个或多个l字符,它们匹配:

PaymentJourna-en-us.xml
PaymentJournal-en-us.xml
PaymentJournall-en-us.xml
PaymentJournallll-en-us.xml
...

你需要使用。符合任何内容的字符:

PaymentJournal.*-en-us.xml

或者你可以更具体:

PaymentJournal \d\d\.\d\d-en-us.xml

其中\d匹配数字,\.匹配句点(。)

答案 1 :(得分:4)

你非常接近。 .是正则表达式中的一个特殊字符,它匹配任何一个字符。因此,如果您拥有*通配符,则需要.*.+。第一个匹配任何字符的0或更多,第二个匹配1或更多,但两者都适用于这种情况。然后,您使用的.需要转发,例如\.,因为您确实希望在那里匹配.。把它们放在一起:

PaymentJournal.*-en-us\.xml