python reg ex включить отсутствующие запятые

Мне нужно, чтобы строка имела значения, разделенные запятыми. Строки, которые я читаю, могут иметь значения, разделенные пробелами.

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

строка примера:

""" 1, ' unchanged 1' " unchanged 2 " 2.009, -2e15 """ 

Я должен включить запятые после 'not this1' и после "not this 2".

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

 """1,' unchanged 1'," unchanged 2 ",2.009,-2e15""" 

Я пытаюсь использовать регулярные выражения типа s1|s2|(s3) . Но он не смог выполнить эту задачу.

Строки могут иметь разное количество значений, разделяемых запятой.

2 Solutions collect form web for “python reg ex включить отсутствующие запятые”

Возможно, было бы проще использовать findall, str.join и str.strip, сначала найдя строки между кавычками, а затем все без пробелов:

 s = """ 1, ' unchanged 1' " unchanged 2 " 2.009, -2e15 3""" r = re.compile("[\'\"].*?[\'\"]|\S+") print(", ".join([x.strip(",") for x in r.findall(s)])) 1, ' unchanged 1', " unchanged 2 ", 2.009, -2e11, ' unchanged 1', " unchanged 2 ", 2.009, -2e15, 35, 3 

Если после запятой вам не требуется пробел:

 print(",".join([x.strip(",") for x in r.findall(s)])) 1,' unchanged 1'," unchanged 2 ",2.009,-2e15,3 

PyParsing, безусловно, не самый быстрый способ запустить это, но это, пожалуй, самый быстрый способ его написать 😉

 from pyparsing import * STRING = sglQuotedString | dblQuotedString NONSTRING = Word(alphanums + '.-') line = OneOrMore(STRING | NONSTRING | Suppress(',')) + lineEnd def insert_commas(s): values = line.parseString(s).asList() return ", ".join(values) s1 = """1, ' unchanged 1' " unchanged 2 " 2, 2""" s2 = """1, ' unchanged 1', " unchanged 2 " , 2, 2""" s3 = """ 1, ' unchanged 1' " unchanged 2 " 2, 2 45""" s4 = """1, 67.90e-34 67.90E-34 7.9093339333 2, 2 """ print insert_commas(s1) print insert_commas(s2) print insert_commas(s3) print insert_commas(s4) 

который печатает

 1, ' unchanged 1', " unchanged 2 ", 2, 2 1, ' unchanged 1', " unchanged 2 ", 2, 2 1, ' unchanged 1', " unchanged 2 ", 2, 2, 45 1, 67.90e-34, 67.90E-34, 7.9093339333, 2, 2 
  • Почему это регулярное выражение приводит к четырем элементам?
  • Scrapy Deploy не соответствует результату отладки
  • Проблема с регулярными выражениями в python
  • Регулярное выражение Python - Игнорировать скобки как индексирование?
  • Комбинаторный продукт регулярных выражений
  • Python re.findall печатает все шаблоны
  • Как использовать регулярные выражения для анализа тегов HTML?
  • анализ слов и оценка из файла python
  •  
    Interesting Posts for Van-Lav

    Matplotlib добавляет конкретную ось, показывающую максимальную ось – множественные масштабы одного наблюдения

    Оценка логистической регрессии с перекрестной проверкой

    Поиск отсортированного списка?

    Python Threading Concept Question

    Как правильно настроить кодировку Python 3 (и cmd.exe)?

    Когда я использую запросы python для проверки сайта, если сайт перенаправляет меня на другую страницу, я буду знать?

    В чем разница между mysql-connector-python, mysql-connector-python-rf и mysql-connector-repackaged?

    Правильный способ расширения AbstractUser в Django?

    Как установить в файлы python 3.4 – .whl

    Количество итераций в python?

    Будет ли Python использовать все процессоры в режиме потока?

    Уступка изнутри с помощью оператора и __exit__ метода контекстного менеджера

    Как добавить новый столбец и строку в файл .xls с помощью xlrd

    Итерация в стиле Mergesort над двумя итераторами в Python

    TensorFlow – Прочтите все примеры из TFRecords сразу?

    Python - лучший язык программирования в мире.