在分隔符列表上的Python拆分字符串,也保留分隔符

时间:2015-01-21 18:05:34

标签: python regex string split

我正在尝试将'if (x==5) {'之类的字符串拆分为:

['if', '(', 'x', '==', '5', ')', '{']  

我有一个我创建的关键字列表作为我的分隔符。我遇到的另一个问题是分隔符的顺序。在分割到'=='

之前,我想在'='上分开

我想拆分多个分隔符,但将分隔符保留为单独的元素。

3 个答案:

答案 0 :(得分:0)

使用re.split

>>> x = 'if (x==5) {'
>>> [i for i in re.split(r'(==)|(\d+)|([(){]|[a-z]+)|\s+', x) if i and i != None ]
['if', '(', 'x', '==', '5', ')', '{']

捕获小组将保持分隔符。

答案 1 :(得分:0)

假设您有一个分隔符列表,如

seps= ('(',')','{','}','==','=')

你可以试试这个:

import re
pattern= r'\s*(%s)\s*'%('|'.join((re.escape(sep) for sep in seps)))
print [token for token in re.split(pattern, 'if (x==5) {') if token]

将分隔符放入捕获组(即(==|=|...))会导致re.split不丢弃它们。

答案 2 :(得分:0)

正如评论中提到的@dylrei所说,这是一种乐观。 lexing工具http://www.dabeaz.com/ply/能够回答我的问题。

谢谢!