我正在用python开发一个应用程序,以从自由格式文本中提取多种类型的数据。该文本可以包括:电子邮件地址,URL和文件路径。
我的问题是:如何使用正则表达式提取文件路径(Linux和Windows),同时排除URL(它们看起来通常类似于文件路径)。
我使用了各种正则表达式来尝试从文本中提取Linux以及Windows文件路径。但是,这些表达式也会出现在URL上。我想排除这种情况。
当前,我在电子邮件和URL中使用以下正则表达式。
电子邮件:
([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)
URL:
(http|ftp|https)://([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?
此应用程序的理想最终行为是在数据结构中存储有效的电子邮件地址,URL和文件路径。
以下是一些文字的示例:
这是一些包含电子邮件地址的文本的示例: example@example.com,以下网站:http://www.example.com,以及 文件路径,例如:/Users/example/Documents/example.text和 C:\ Windows \ System32 \我只需要拉出文件路径 Unix和Windows格式。
答案 0 :(得分:0)
这是一种可以正确处理您的示例的解决方案
import re
example = "This is an example of some text which will include email addresses: example@example.com, websites such as: http://www.example.com, and file paths like: /Users/example/Documents/example.text and C:\Windows\System32\ I need to pull out only the file paths both Unix and Windows format."
emails = re.findall("(?: )([^ ]*@[^ ]*\.[a-z]{2,3})", example)
urls = re.findall("(?: )((?:http|ftp|https):[^ ,]*)",example)
unix_paths = re.findall("(?: )(/[^ ,]*)(?:[ ,])", example)
windows_paths = re.findall("(?: )(C:\\\\[^ ,]*)(?:[ ,])", example)
它使用空格和逗号作为分隔符。它不适用于以文本开头/结尾的路径,但这并不难纠正