разделение строки с использованием регулярного выражения, но игнорируйте разделители в кавычках, и разделители должны быть динамическими - PullRequest
0 голосов
/ 04 февраля 2019

Я использую следующее выражение регулярного выражения для разделения разделителей в строке, но игнорирую разделители в кавычках

re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data) 

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

data="\"john\"|\"100032487\"|\"ab|cdef\"|\"ghijkl\""
output = re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data)

вместо [|,] я должен назначить эти разделители переменной и использовать переменную в вышеприведенном выражении регулярного выражения

1 Ответ

0 голосов
/ 05 февраля 2019

Похоже, вы пытаетесь использовать регулярное выражение для анализа данных в стиле CSV.Библиотека Python csv может это проанализировать.

Например, следующий подход:

import csv
from io import StringIO

data = "\"john\"|\"100032487\"|\"ab|cdef\"|\"ghijkl\""
print(next(csv.reader(StringIO(data), delimiter='|')))

вернет данные в виде четырех элементов в списке:

['john', '100032487', 'ab|cdef', 'ghijkl']

Поскольку третий элемент заключен в кавычки,обычно это означает, что разделители внутри должны игнорироваться.Этот тип обязательной логики объясняет, почему использование регулярных выражений для этого не рекомендуется.

csv.reader() принимает объект файла, так как data - это строка, которую я впервые использую StringIO(), чтобы сделать dataкак файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...