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 
  • Найти / заменить URL-адрес в документе с помощью регулярного выражения Python
  • В Python, как перечислять все символы, соответствующие расширенному регулярному выражению POSIX ``?
  • Регулярное выражение Python для повторения нескольких совпадений
  • Регулярные выражения в Python неожиданно замедляются
  • Используйте Python для извлечения длин ветвей из Newick Format
  • Как определить недействительную строку с экранированной строкой с использованием регулярного выражения?
  • конвертировать строку dsn в python в kwargs
  • Правильные выражения Python имеют эквивалент атомной группировки Ruby?
  • Заменить одиночные кавычки двойным с исключением некоторых элементов
  • Как запрашивать документы в mongodb (pymongo), где все ключевые слова существуют в поле?
  • Python re.search () и re.findall ()
  • Python - лучший язык программирования в мире.