如何制作一个匹配任何以 .rtf 结尾的文件的正则表达式?
How to make a regex which will match any file ending with .rtf?
所以我在做一个项目,我必须编写一个程序来打开文件夹中的所有 .rtf 文件并搜索与用户提供的正则表达式匹配的任何行,并且结果必须打印到屏幕。
代码非常简单,但我很难编写一个正则表达式来匹配任何以 .rtf
结尾的文件。
这是文件夹内所有文件的 字符串,Python 将在其中搜索以 .rtf
:[=21= 结尾的文件]
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
但是上面的一些正则表达式匹配这些文件的某些部分,而其他正则表达式匹配整个文本本身!
None 这些正则表达式可以正常工作。我确实理解为什么它们不起作用,但我无法修复它们。我应该如何修改它们,否则新的正则表达式应该与给定字符串中扩展名为 .rtf
的文件相匹配?
匹配所有以 .rtf 结尾的不区分大小写的可打印字符
/^[ -~]\.rtf$/i
我正要提到这似乎是 python 的工作,但这是我想出的仅使用正则表达式来回答您的问题的方法:
((?<=\.\w{3} )|^)[\w ]+\.rtf
这成功地找到了所有扩展名为“.rtf”的文件,即使在字符串的开头,通过在最近的文件名末尾或字符串的开头开始查找。但是,这确实假设所有文件扩展名都是 3 个字符长。如果您可能有长度为 2 的文件扩展名(例如,*.7z
)或其他内容,您应该在第一个左括号后添加 (?<=\.\w{2} )|
(或任何其他文件长度)。这会给你:
((?<=\.\w{2} )|(?<=\.\w{3} )|^)[\w ]+\.rtf
所以我在做一个项目,我必须编写一个程序来打开文件夹中的所有 .rtf 文件并搜索与用户提供的正则表达式匹配的任何行,并且结果必须打印到屏幕。
代码非常简单,但我很难编写一个正则表达式来匹配任何以 .rtf
结尾的文件。
这是文件夹内所有文件的 字符串,Python 将在其中搜索以 .rtf
:[=21= 结尾的文件]
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
但是上面的一些正则表达式匹配这些文件的某些部分,而其他正则表达式匹配整个文本本身!
None 这些正则表达式可以正常工作。我确实理解为什么它们不起作用,但我无法修复它们。我应该如何修改它们,否则新的正则表达式应该与给定字符串中扩展名为 .rtf
的文件相匹配?
匹配所有以 .rtf 结尾的不区分大小写的可打印字符
/^[ -~]\.rtf$/i
我正要提到这似乎是 python 的工作,但这是我想出的仅使用正则表达式来回答您的问题的方法:
((?<=\.\w{3} )|^)[\w ]+\.rtf
这成功地找到了所有扩展名为“.rtf”的文件,即使在字符串的开头,通过在最近的文件名末尾或字符串的开头开始查找。但是,这确实假设所有文件扩展名都是 3 个字符长。如果您可能有长度为 2 的文件扩展名(例如,*.7z
)或其他内容,您应该在第一个左括号后添加 (?<=\.\w{2} )|
(或任何其他文件长度)。这会给你:
((?<=\.\w{2} )|(?<=\.\w{3} )|^)[\w ]+\.rtf