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/ 能够回答我的问题。
谢谢!
我正在尝试将 '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/ 能够回答我的问题。
谢谢!