通过正则表达式中的循环

时间:2015-02-01 00:11:41

标签: python regex

我需要在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\|\)")]

请给我任何提示?

1 个答案:

答案 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']