Python 使用正则表达式从文本文件中提取文件名
各位 我不是正则表达式方面的专家,我在谷歌上搜索过我的问题,但还没有找到解决方案。如果有人发现另一个SO帖子有相同的问题,请随意指向该帖子 问题:Python 使用正则表达式从文本文件中提取文件名,python,regex,regex-group,Python,Regex,Regex Group,各位 我不是正则表达式方面的专家,我在谷歌上搜索过我的问题,但还没有找到解决方案。如果有人发现另一个SO帖子有相同的问题,请随意指向该帖子 问题: r'\b(\w+\.pdf)\b' r'^\\(.+\\)*(.+)\.(.+)\.pdf$' r'[^A-Za-z0-9_\.pdf]' r'[\\/:"*?<>|]+\.pdf' 我得到了一个文本文件,其中大部分字符都是html标记。这些文本文件可能包含如下所示的PDF文件名。我只想提取扩展名为.PDF的所有此类PDF文件名。请注
r'\b(\w+\.pdf)\b'
r'^\\(.+\\)*(.+)\.(.+)\.pdf$'
r'[^A-Za-z0-9_\.pdf]'
r'[\\/:"*?<>|]+\.pdf'
我得到了一个文本文件,其中大部分字符都是html标记。这些文本文件可能包含如下所示的PDF文件名。我只想提取扩展名为.PDF
的所有此类PDF文件名。请注意,这些PDF文件名可能出现在文本文档字符串中的任何位置,而不仅仅出现在
前缀之后
示例文本:
Example 1: <FILENAME>any_valid_characters_filename.pdf
Example 2: hello this is a good file abc-def_xyz-1.pdf
和其他一些正则表达式,但没有成功
任何帮助都将不胜感激。谢谢。这行吗
\b[^\s<>]*?.pdf\b
\b[^\s]*?.pdf\b
它适用于您的示例:
更新您的新请求,在
和whatever.pdf
之间不存在空格:
用法:\b(?[\s]|\w)[\w-]*?.pdf\b
示例:这行吗
\b[^\s<>]*?.pdf\b
\b[^\s]*?.pdf\b
它适用于您的示例:
更新您的新请求,在
和whatever.pdf
之间不存在空格:
用法:\b(?[\s]|\w)[\w-]*?.pdf\b
示例:我认为以下表达式涵盖了您提到的所有内容:
r"([\w\d\-.]+\.pdf)"
由于它将任何作文与一个单词字符、一个数字字符、一个
-
符号和一个
符号后跟.pdf
匹配,我认为以下表达式涵盖了您提到的所有内容:
r"([\w\d\-.]+\.pdf)"
由于它与任何组合匹配,包括一个单词字符、一个数字字符、一个
-
符号和一个
符号后跟.pdf
如果文件名不能包含空格,您可以使用类似r'>([^\s\\\/:“*?|]+\.pdf)\b'
的内容,假设文件名可能包含空格(尽管不太可能)。这仍然有效吗?@WiktorStribiżew使用您的正则表达式时,它在?字符处抛出语法错误。从模式中删除\s
。请参阅。我的模式中没有错误,但在您的代码中,我看不到您有什么代码,请将其添加到问题中。使用re.findall(r“>([^\\/:“*?\124;]+\.pdf)\b”,“abc-1def.pdf”)
抛出语法错误。如果文件名不能包含空格,您可以使用类似r'>([^\s\\/:“*?|]+\.pdf)\b'
假设文件名可能包含空格(尽管不太可能)。这仍然有效吗?@WiktorStribiżew使用您的正则表达式时,它在?字符处抛出语法错误。从模式中删除\s
。请参阅。我的模式中没有错误,但在您的代码中,我看不到您有什么代码,请将其添加到问题中。使用re.findall(r“>([^\\/:“*?\124;]+\.pdf)\b”,“abc-1def.pdf”)
抛出语法错误。谢谢。如果我只想使用第一个示例(忽略第二个示例匹配),我需要什么更改?注意:我想忽略示例1中字符串“”和“.pdf”之间的所有空格。如果字符串“”和“.pdf”之间有空格,我想忽略此匹配尝试r”\s*([\w\d\-.]+\.pdf)”
,它将匹配
,后跟有效的pdf名称。感谢您的快速回复。但当
之后和任何单词或文件名的开头之前有空格时,这就不起作用了。在这里查一下,谢谢。如果我只想使用第一个示例(忽略第二个示例匹配),我需要什么更改?注意:我想忽略示例1中字符串“”和“.pdf”之间的所有空格。如果字符串“”和“.pdf”之间有空格,我想忽略此匹配尝试r”\s*([\w\d\-.]+\.pdf)”
,它将匹配
,后跟有效的pdf名称。感谢您的快速回复。但当
之后和任何单词或文件名的开头之前有空格时,这就不起作用了。在这里查一下,谢谢。如果我只想使用第一个示例(忽略第二个示例匹配),我需要什么更改?注意:我想忽略示例1中字符串“”和“.pdf”之间的所有空格。如果字符串“”和“.pdf”之间有空格,我想忽略此匹配尝试此操作<代码>\b(?[\s]|\w)[\w-]*?.pdf\b谢谢。但我想忽略示例2,因为它在更新的共享链接中没有前缀
,所有这些都应该放在问题描述中。现在,正则表达式字符串将完全不同——如果你继续移动球门柱,人们将无法帮助你。这里是\b(?谢谢。如果我只想使用第一个示例大小写,(并忽略第二个示例匹配),我需要做什么更改?注意,我想忽略示例1中字符串“”和.pdf之间的所有空格。如果字符串“”和.pdf之间有空格,我想忽略此匹配试试这个方法?\b(?[\s]|\w)[\w-]*?.pdf\b
谢谢。但是我想忽略示例2,因为它在更新的共享链接中没有前缀
。所有这些都应该放在您的问题描述中。现在正则表达式字符串将完全不同-如果您继续移动目标帖子,人们将无法帮助您。这里\b(?)?