Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式从文本文件中提取文件名_Python_Regex_Regex Group - Fatal编程技术网

Python 使用正则表达式从文本文件中提取文件名

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文件名。请注

各位

我不是正则表达式方面的专家,我在谷歌上搜索过我的问题,但还没有找到解决方案。如果有人发现另一个SO帖子有相同的问题,请随意指向该帖子

问题:

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(?)?