Я пишу regx для удаления квалификатора теста и дополнительного разделителя из строки.
У меня есть образец, как показано ниже,
"ID"~"Name"~"DESC"
1~2014~13~"DS"~DF"
1~2014~13~"DS"~"DF"
"1ABCA~B C"~"ERTE"
"2"~"XYZ"~"ABC~ is~ bother"
"3"~"YYZ"~"MEL O CRÈME DOUGHNUTS RECLASS"
4~"XAA"~"sf~sd sdfsf"
5~"TES"~"SFSFSF"sdfsf"
6~"ABC"SDDSL~"dfadf"
ожидаемый результат,
ID~Name~DESC
1~2014~13~DS~DF
1~2014~13~DS~DF
1ABCA B C~ERTE
2~XYZ~ABC is bother
3~YYZ~MEL O CRÈME DOUGHNUTS RECLASS
4~XAA~sf sd sdfsf
5~TES~SFSFSF"sdfsf
6~ABCSDDSL~dfadf
Я написал ниже код для того же,
import re
delimiter = '~'
pattern = re.compile(r'"' + delimiter + r'"')
pattern1 = re.compile(r'"[^"]*(?:""[^"]*)*"')
with open("source file path here ", "r") as \
test:
for line in test:
fields = re.split(pattern, line)
print(fields)
output = ""
if re.match('^[^"]', line):
matches = re.findall(pattern1, line)
print(matches)
for match in matches:
line = re.sub(match, re.sub('^["]|["]$', "", match), line)
print(line)
else:
lastfield = fields[-1]
for field in fields:
if field != lastfield:
field = re.sub('^["]|["]$', "", field)
output = output + re.sub('[' + delimiter + ']', " ", field) \
+ delimiter
else:
field = re.sub('^["]|["]$', "", field)
output = output + re.sub('[' + delimiter + ']', " ", field)
print(output)
ищем оптимальный способ сделать это и код, который будет обрабатывать все шаблоны.
1~2014~13~DS~DF
? Последний"
не спарен. Или третья часть должна остаться в последнем поле? - person Wiktor Stribiżew   schedule 15.06.20181~2014~13~DS~DF
действительно дублироваться? - person Wiktor Stribiżew   schedule 15.06.2018"
во второй строке должен исчезнуть, почему он должен оставаться в предпоследней строке? Извините, этот вопрос не ясен, и только вы можете ответить на него. Мы не знаем, как вы определяете, что неизменно, а что нежелательно. - person Wiktor Stribiżew   schedule 15.06.20181ABCA B C~ERTE
ожидается от"1ABCA~B C"~"ERTE"
? Я бы ожидал"1ABCA~B C~ERTE
. То же самое о2~XYZ~ABC is bother
- я бы ожидал2~XYZ~ABC~ is~ bother
. Я не могу получить формулу. Я попробовал ideone.com/4qlIks. - person Wiktor Stribiżew   schedule 16.06.2018~
между кавычками нужно удалить, то4~"XAA"~"sf~sd sdfsf"
должно превратиться в4~XAA~sf sd sdfsf
, почему вы ожидаете4~XAA~sf~sd sdfsf
? Я попробовал ideone.com/j9f6EH. - person Wiktor Stribiżew   schedule 16.06.2018~
между квалификаторами полей (двойные кавычки), а затем удаляю все"
, у которых нет"
или~
в конце поля (не уверен, что это то, что вам нужно, поэтому все еще не решается опубликовать ответ). - person Wiktor Stribiżew   schedule 17.06.2018