Regex для файла или URL-пути в Python [закрыто]

Существует другой способ:

CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );

Получить количество строк

SELECT COUNT(*) FROM `results`;

Получить подмножество

SELECT * FROM `results` LIMIT 5,10;

Временная таблица существует только в текущей сессии. После этого я все равно буду очищать

DROP TEMPORARY TABLE `results`;
-8
задан EJoshuaS 28 July 2019 в 23:08
поделиться

4 ответа

Если Вам нужен более простой regex для понимания, который возвратит целую строку как URL или Путь к файлу:

import re

list = [
    'https://projects.lukehaas.me/regexhub/', 
    'C://path/folder_0/file', 
    'c://path/folder_0/file', 
    'www.google.com', 
    'www.test.com/123/456'
]

for url in list:
    if re.findall(r'^(https|http|www)', url): # Checks from starting position of string(^), using pipe(|) character as a "OR" condition to check which strings starts with these pattern
        print('Found URL: ' + url)
    elif re.findall(r'([a-zA-Z]{1}:)', url): # Checks from starting position of string(^), uses bracket([]) which contains sets of character, in this case "a" to "z" and "A" to "Z" with using curly braces({}) which contains number of characters and then literal colon symbol(:) to check which strings starts with these pattern
        print('Found File Path: ' + url)

РЕДАКТИРОВАНИЕ: Попробуйте ниже примера согласно Вашему данному почтовому основному тексту:

email_body = " (id5) id5@gmail.com 2019-07:27 22:04:38.635317100 -0700 (id62) id11@gmail.com 2010/08/26 00010111101   111 0b00110 (id52) id52@gmail.com ‘0acdadecf822eeff32aca5830e438cb54aa722e3’, and ‘8BADF00D’. (52422user) id662@gmail.com 2019-07-27_2313hr_19sec     165.91.15.131  https://projects.lukehaas.me/regexhub/   C://path/folder_0/file  c://path/folder_0/file  next one is  www.google.com [] www.test.com/123/456 (llok) idffv@gmail.com 2019-07.27 0x0f4’,  /home/mita/file1 # https://projects.lukehaas.me/regexhub/"

files = re.findall(r'(?:[^https|ftp|http|www][a-zA-Z]{1}:)\S+', email_body)
urls = re.findall(r'(?:http|http|www|ftp)\S+', email_body)
1
ответ дан 5 September 2019 в 20:13
поделиться

Нет большого количества детали о том, какой более широкий диапазон шаблонов Вы хотите искать, но я предположил, что все, чему Вы хотите соответствовать, является этими пятью примерами , Вы дали. Принятие этого имеет место, и это - большое предположение, все, что необходимо искать, начинаются ли строки с одного из них [https://, http://, ftp://, file://, www., C://, C://].

я буду повреждать проблему на двух шагах. Сначала я скомпилирую шаблон, и затем я буду искать его. Я сделал это как ниже.

import re
Strings_To_Search = [ 'https://projects.lukehaas.me/regexhub/',
 'C://path/folder_0/file',
 'c://path/folder_0/file',
 'www.google.com',
 'www.test.com/123/456' ]
Pattern = re.compile('^((https|ftp|file)?([Cc])?:\/\/)?(www.)?')
for String in Strings_To_Search:
    print(re.search(Pattern,String))

Выполнение этого дало мне соответствия. Однако Ваша идея искать должна быть по большим шаблонам. Сообщите нам то, что точно Вы ищете в строках. Также обратите внимание, что необходимо иметь отрицательный контроль также (некоторые строки, которые не будут соответствовать).

вывод поиска как ниже

enter image description here

2
ответ дан 5 September 2019 в 20:13
поделиться

Не лучшее решение, все же мы можем, вероятно, использовать чередование для разделения URL и путей к файлам, которые мы могли бы иметь с некоторыми выражениями с ограниченными границами, в зависимости от наших данных, возможно, с это выражение и это может, конечно, быть оптимизировано, и существуют пограничные случаи на этом.

Тест

import re

regex = r"(?i)(?:\s|^)(?:([a-z]:\/\/[^\/]+\/\S*)|((?=.*https?:\/\/|.*www\.)(?:https?:\/\/)?(?:www\.)?[a-z]\w+\.\S{1,})|((?:\/[a-z]\w+){2,})|(ftp:\/\/\S*))"

test_str = """

 (id5) id5@gmail.com 2019-07:27 22:04:38.635317100 -0700
 (id5) id5@gmail.com 2019-07:27 22:04:38.635317100 -0700
 (id62) id11@gmail.com 2010/08/26 00010111101   111 0b00110
 (id52) id52@gmail.com ‘0acdadecf822eeff32aca5830e438cb54aa722e3’, and ‘8BADF00D’.
 (52422user) id662@gmail.com 2019-07-27_2313hr_19sec     165.91.15.131  https://projects.lukehaas.me/regexhub/   C://path/folder_0/file
  c://path/folder_0/file  next one is  www.google.com [] www.test.com/123/456
 (llok) idffv@gmail.com 2019-07.27 0x0f4’,  /home/mita/file1 /url /url/ 

 and these www.test and www.test. ignore me ftp://[user[:password]@]host[:port]/url-path

 # https://projects.lukehaas.me/regexhub/

"""
print(re.findall(regex, test_str, re.M))

Вывод

[('', 'https://projects.lukehaas.me/regexhub/', '', ''), ('C://path/folder_0/file', '', '', ''), ('c://path/folder_0/file', '', '', ''), ('', 'www.google.com', '', ''), ('', 'www.test.com/123/456', '', ''), ('', '', '/home/mita/file1', ''), ('', 'www.test', '', ''), ('', 'www.test.', '', ''), ('', '', '', 'ftp://[user[:password]@]host[:port]/url-path'), ('', 'https://projects.lukehaas.me/regexhub/', '', '')]
0
ответ дан 5 September 2019 в 20:13
поделиться

Рабочий пример: https://regex101.com/r/4g3U0a/3

(?P<url>((https|ftp|file):\/\/)|(\w*\.\w*\.\w*).*)|(?P<file>\w:\/\/.*)

Здесь Вы видите, как получить доступ к нему.

0
ответ дан 5 September 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: