Существует другой способ:
CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );
Получить количество строк
SELECT COUNT(*) FROM `results`;
Получить подмножество
SELECT * FROM `results` LIMIT 5,10;
Временная таблица существует только в текущей сессии. После этого я все равно буду очищать
DROP TEMPORARY TABLE `results`;
Если Вам нужен более простой 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)
Нет большого количества детали о том, какой более широкий диапазон шаблонов Вы хотите искать, но я предположил, что все, чему Вы хотите соответствовать, является этими пятью примерами , Вы дали. Принятие этого имеет место, и это - большое предположение, все, что необходимо искать, начинаются ли строки с одного из них [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))
Выполнение этого дало мне соответствия. Однако Ваша идея искать должна быть по большим шаблонам. Сообщите нам то, что точно Вы ищете в строках. Также обратите внимание, что необходимо иметь отрицательный контроль также (некоторые строки, которые не будут соответствовать).
вывод поиска как ниже
Не лучшее решение, все же мы можем, вероятно, использовать чередование для разделения 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/', '', '')]
Рабочий пример: https://regex101.com/r/4g3U0a/3
(?P<url>((https|ftp|file):\/\/)|(\w*\.\w*\.\w*).*)|(?P<file>\w:\/\/.*)
Здесь Вы видите, как получить доступ к нему.