Извлекать пути к файлам из текста произвольной формы - PullRequest
0 голосов
/ 02 апреля 2019

Я разрабатываю приложение на 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.

1 Ответ

0 голосов
/ 13 апреля 2019

Вот решение, которое правильно работает с вашим примером.

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)

он использует пробелы и запятые в качестве разделителей. Он не работает с путями в начале / конце текста, но это не должно быть сложно исправить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...