Python复杂的字符串拆分

时间:2015-08-21 22:46:29

标签: python string split

说我有这个字符串:

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

我怎样才能使它成为string.split(&#34 ;;")或string.split(":")会忽略引号中的任何字符?

谢谢, PM

2 个答案:

答案 0 :(得分:3)

如果您无法获得更清晰的输入,我建议您使用正则表达式并使用list创建tuple findall()个:< / p>

>>> 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

您可以使用str.format()格式化输出:

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

答案 1 :(得分:0)

如果所有字符串都在quoatation标记内,则您的问题不会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"']