Python 在分隔符列表中拆分字符串,同时保留分隔符

Python Split String On A List Of Delimiters, Also Preserve Delimiters

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

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

我创建了一个关键字列表作为分隔符。我面临的另一个问题是分隔符的顺序。在 '='

拆分之前,我想拆分 '=='

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

使用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', ')', '{']

捕获组将保持分隔符。

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

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 不丢弃它们。

正如@dylrei 在评论中提到的,这是词法分析。词法分析工具 http://www.dabeaz.com/ply/ 能够回答我的问题。

谢谢!