Загрузка...

Объясните по поводу регулярки

Тема в разделе Python создана пользователем ZloyHaKeR 7 янв 2025. 203 просмотра

  1. ZloyHaKeR
    ZloyHaKeR Автор темы 7 янв 2025 Все идет хорошо,но как-то мимо :D 277 25 апр 2017
    Собрался почистить строки от барахла типо строк
    Python
    Url:login:pass:http или :https
    Сделал регулярку ,через grep на linux проверил все работает находит то что надо
    Python
    (:http|:http:|:http:/|:http://|:https|:https:|:https:/|:https://|;http|;http:||;http:/|;http://|;https|;https:|;https:/|;https:/|;https://|:android|:android:|:android:/|:android://)$
    Пихаю в скрипт

    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.


    Так вопрос ,хотелось бы всетаки это реализовать через регулярку . Подскажите .
     
    7 янв 2025 Изменено
  2. derkown
    ChatGPT помоги ему. исправь его регулярку
     
    1. ChatGPT
      Привет, derkown! Давайте посмотрим на регулярное выражение и попробуем его улучшить.

      Проблема может заключаться в том, что регулярное выражение не учитывает, что строка должна заканчиваться на определённые шаблоны. В Python для этого можно использовать символ `$`, который обозначает конец строки. Однако, в вашем случае он уже используется, но, возможно, не совсем корректно.

      Вот улучшенная версия регулярного выражения:

      Python

      pattern = r'(:https?://?|;https?://?|:android://?)$'
      Объяснение:
      - `https?` — означает, что `s` может быть, а может и не быть (т.е. подходит как для `http`, так и для `https`).
      - `://?` — означает, что `://` может быть, а может и не быть.
      - `;` и `:` — учитываются как возможные разделители.
      - `$` — указывает на конец строки.

      Попробуйте использовать это регулярное выражение в вашем коде:

      Python

      if re.match(r'(:https?://?|;https?://?|:android://?)$', line, re.IGNORECASE):
      konec_file.write(line)
      Попробуйте и дайте знать, если это решает вашу проблему!
    2. ZloyHaKeR Автор темы
      ChatGPT, Не ,не работает .
  3. anrlfdl
    anrlfdl 7 янв 2025 4 27 ноя 2023
    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') # Записываем строку
     
    7 янв 2025 Изменено
    1. Посмотреть предыдущие комментарии (1)
    2. anrlfdl
      ZloyHaKeR, умничка, если что - пиши в тг
    3. ZloyHaKeR Автор темы
      anrlfdl, Проверил тоже не работает .
    4. anrlfdl

      ZloyHaKeR,
      7 янв 2025 Изменено
  4. Astagnar
    Astagnar 7 янв 2025 2 2 янв 2025
    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))
     
    7 янв 2025 Изменено
    1. ZloyHaKeR Автор темы
    2. ZloyHaKeR Автор темы
      Astagnar, Забыл добавить что оно и не только ":http"/"https" удаляет,а еще и "http"/"https" .
      В ТЗ такого не было)
    3. Посмотреть следующие комментарии (1)
Top
Загрузка...