我需要在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\|\)")]
请给我任何提示?
答案 0 :(得分:0)
似乎您需要使用re.findall
函数而不是re.split
。
>>> terminals=['true','/','false']
>>> string="false false/true"
>>> regex = '|'.join(terminals)
>>> re.findall(regex, string)
['false', 'false', '/', 'true']
OR
使用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']
OR
>>> 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']