通过正则表达式内部的循环



我需要用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']

最新更新