我需要用python编写一个小函数,它将终端列表和一个字符串作为输入,并按终端拆分字符串。所以说:
terminals=['true','/','false']
和:
string="false false/true"
输出应为:
'false', 'false','/','true'.
我在编写正则表达式时遇到问题,我不知道如何合并一个将遍历终端每个元素的循环
import re
def tokenize(terminals,stringline):
tokens = [t for t in re.split(r"(s+|true|false|)")]
可以给我任何提示吗?
似乎您需要使用re.findall
函数而不是re.split
.
>>> terminals=['true','/','false']
>>> string="false false/true"
>>> regex = '|'.join(terminals)
>>> re.findall(regex, string)
['false', 'false', '/', 'true']
或
在正则表达式中使用捕获组re.split
以保持分隔符。
>>> string="false false/true"
>>> [i for i in re.split(r'(true|false|/)|s+', string) if i is not None and i]
['false', 'false', '/', 'true']
或
>>> def tokenize(terminals,stringline):
regex='|'.join(terminals)
return [i for i in re.split('('+ regex + ')' +r'|s+', stringline) if i is not None and i]
>>> terminals=['true','/','false']
>>> string="false false/true"
>>> tokenize(terminals, string)
['false', 'false', '/', 'true']