Собрался почистить строки от барахла типо строк Url:login:pass:http или :https Python Url:login:pass:http или :https Сделал регулярку ,через grep на linux проверил все работает находит то что надо (:http|:http:|:http:/|:http://|:https|:https:|:https:/|:https://|;http|;http:||;http:/|;http://|;https|;https:|;https:/|;https:/|;https://|:android|:android:|:android:/|:android://)$ Python (:http|:http:|:http:/|:http://|:https|:https:|:https:/|:https://|;http|;http:||;http:/|;http://|;https|;https:|;https:/|;https:/|;https://|:android|:android:|:android:/|:android://)$ Пихаю в скрипт elif re.match(r'(:http|:http:|:http:/|:http://|:https|:https:|:https:/|:https://|;http|;http:|;http:/|;http:/|;http://|;https|;https:|;https:/|;https:/|;https://|:android|:android:|:android:/|:android://)$', line, re.IGNORECASE): konec_file.write(line) Python elif re.match(r'(:http|:http:|:http:/|:http://|:https|:https:|:https:/|:https://|;http|;http:|;http:/|;http:/|;http://|;https|;https:|;https:/|;https:/|;https://|:android|:android:|:android:/|:android://)$', line, re.IGNORECASE): konec_file.write(line) А оно нифига не работает.Тупо пропускает строки и пишет по другим данным (дальше в коде). Решение нашлось ,только использование line.endwish. Так вопрос ,хотелось бы всетаки это реализовать через регулярку . Подскажите .
Привет, derkown! Давайте посмотрим на регулярное выражение и попробуем его улучшить. Проблема может заключаться в том, что регулярное выражение не учитывает, что строка должна заканчиваться на определённые шаблоны. В Python для этого можно использовать символ `$`, который обозначает конец строки. Однако, в вашем случае он уже используется, но, возможно, не совсем корректно. Вот улучшенная версия регулярного выражения: pattern = r'(:https?://?|;https?://?|:android://?)$' Python pattern = r'(:https?://?|;https?://?|:android://?)$' Объяснение: - `https?` — означает, что `s` может быть, а может и не быть (т.е. подходит как для `http`, так и для `https`). - `://?` — означает, что `://` может быть, а может и не быть. - `;` и `:` — учитываются как возможные разделители. - `$` — указывает на конец строки. Попробуйте использовать это регулярное выражение в вашем коде: if re.match(r'(:https?://?|;https?://?|:android://?)$', line, re.IGNORECASE): konec_file.write(line) Python if re.match(r'(:https?://?|;https?://?|:android://?)$', line, re.IGNORECASE): konec_file.write(line) Попробуйте и дайте знать, если это решает вашу проблему!
# Варианты "мусорных" окончаний bad_endings = ( ":http", ":http:", ":http:/", ":http://", ":https", ":https:", ":https:/", ":https://", ":android", ":android:", ":android:/", ":android://" ) # Открываем файлы with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile: for line in infile: line = line.strip() # Убираем пробелы # Проверяем, заканчивается ли строка на один из мусорных вариантов if line.endswith(bad_endings): outfile.write(line + '\n') # Записываем строку Python # Варианты "мусорных" окончаний bad_endings = ( ":http", ":http:", ":http:/", ":http://", ":https", ":https:", ":https:/", ":https://", ":android", ":android:", ":android:/", ":android://" ) # Открываем файлы with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile: for line in infile: line = line.strip() # Убираем пробелы # Проверяем, заканчивается ли строка на один из мусорных вариантов if line.endswith(bad_endings): outfile.write(line + '\n') # Записываем строку
anrlfdl, Через endswith я в конце и сделал,а вот с регой потом пробну что gtp написала. Вроде у нее сразу спрашивал ,и результата не было .
import re with open("input_file.txt", 'r', encoding="utf-8") as file: lines = file.readlines() pattern = re.compile(r"([;:]?(http|https|android)(:?/?/?/?:?))$") updated_lines = [pattern.sub('', line.rstrip()) for line in lines] with open("output_file.txt", 'w', encoding="utf-8") as file: file.write("\n".join(updated_lines)) Python import re with open("input_file.txt", 'r', encoding="utf-8") as file: lines = file.readlines() pattern = re.compile(r"([;:]?(http|https|android)(:?/?/?/?:?))$") updated_lines = [pattern.sub('', line.rstrip()) for line in lines] with open("output_file.txt", 'w', encoding="utf-8") as file: file.write("\n".join(updated_lines)) Вход http://test.com:login:pass:http: https://test.com:login:pass:https: https://test.com:login:pass:android: http://test.com:login:pass:http:/ https://test.com:login:pass:https:/ https://test.com:login:pass:android:/ http://test.com:login:pass:http:// https://test.com:login:pass:https:// https://test.com:login:pass:android:// http://test.com:login:pass;http: https://test.com:login:pass;https: https://test.com:login:pass;android: http://test.com:login:pass;http:/ https://test.com:login:pass;https:/ https://test.com:login:pass;android:/ http://test.com:login:pass;http:// https://test.com:login:pass;https:// https://test.com:login:pass;android:// Выход http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass http://test.com:login:pass https://test.com:login:pass https://test.com:login:pass
Astagnar, Забыл добавить что оно и не только ":http"/"https" удаляет,а еще и "http"/"https" . В ТЗ такого не было)