如何制作一个匹配任何以.rtf结尾的文件的正则表达式?

时间:2017-08-19 03:01:57

标签: python regex python-3.6

所以我正在做一个项目,我必须编写一个程序,打开文件夹中的所有.rtf文件,并搜索与用户提供的正则表达式匹配的任何行,并且结果必须打印到屏幕上。

代码非常简单,但我很难编写一个匹配任何以.rtf结尾的文件的正则表达式。

以下是文件夹中所有文件的字符串,其中Python将搜索以.rtf结尾的文件:

rxn of glucose.png Screen Shot 2017-07-17 at 8.25.30 AM.png Screen Shot 2017-08-18 at 11.23.21 AM.png Screen Shot 2017-08-18 at 11.36.27 AM.png Screen Shot 2017-08-19 at 6.06.19 AM.png SSS.rtf Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf

我尝试了许多正则表达式:

1)(\w+\.rtf)

看看它的结果:https://regex101.com/r/oZzN6T/1

2)[a-zA-Z0-9].rtf

https://regex101.com/r/RaeL0Z/1

3).+\.rtf

https://regex101.com/r/8hRIGo/1

期望的结果是:Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf SSS.rtf但是上面的一些正则表达式匹配这些文件的某些部分而其他正则匹配整个文本本身!

这些正则表达式都不能正常工作。我明白为什么他们不工作但我无法修复它们。我应该如何修改它们,或者在给定字符串中与扩展名为.rtf的文件匹配的新正则表达式应该是什么?

2 个答案:

答案 0 :(得分:2)

我要提到这对于python而言似乎是一项工作,但这就是我用正则表达式来回答你的问题:

((?<=\.\w{3} )|^)[\w ]+\.rtf

通过在最近的文件名结束之后或在字符串的开头查看,即使在字符串的开头也能成功查找扩展名为“.rtf”的所有文件。但是,这确实假设所有文件扩展名都是3个字符长。如果您的文件扩展名可能是长度为2(例如,*.7z)或其他内容,则应在第一个左括号后添加(?<=\.\w{2} )|(或其他任何文件长度)。这会给你:

((?<=\.\w{2} )|(?<=\.\w{3} )|^)[\w ]+\.rtf

答案 1 :(得分:0)

匹配所有可打印字符不区分大小写,以.rtf

结尾
/^[ -~]\.rtf$/i