2015-08-21 2 views
0

Говорят, что у меня есть эта строка:Python Сложное Расщепление строки

"hello":"noun":"a greeting";"hello":"verb":"the;action;of;greeting" 

Как я могу сделать это так String.split («;») или String.split («:») будет игнорировать любые символы в кавычках?

Спасибо, PM

+1

're.split' on' '"[;:]"' '? – cdarke

+0

Что, если это то, что * внутри * цитаты? Кажется, что это требует токенизатора – dwanderson

ответ

3

Если вы не можете получить более чистый, чем вход, я бы рекомендовал использовать регулярное выражение и создавая list из tuple с с findall():

>>> import re 
>>> mystring = '"hello":"noun":"a greeting";"hello":"verb":"the;action;of;greeting"' 
>>> result = re.findall(r'"(.+?)":"(.+?)":"(.+?)"', mystring) 
>>> for item in result: 
...  print(*item) 
... 
hello noun a greeting 
hello verb the;action;of;greeting 

You может форматировать выход с str.format():

>>> for item in result: 
...  print('{} - {}, {}'.format(*(part.replace(';', ' ') for part in item))) 
... 
hello - noun, a greeting 
hello - verb, the action of greeting 
0

Ваш вопрос не составляет 100% ясно, если все строки находятся внутри знаков квот. В любом случае, это должно сработать. Он не удаляет кавычки вокруг строки (вы можете сделать это впоследствии, если хотите).

In [20]: [x for x in re.split(r'(:|;|".*?")', s) if x not in [":",";",""]] 
Out[20]: 
['', 
'"hello"', 
'"noun"', 
'"a greeting"', 
'"hello"', 
'"verb"', 
'"the;action;of;greeting"'] 
Смежные вопросы