我正在使用re.split()
将字符串分隔为标记。目前我用作参数的模式是[^\dA-Za-z]
,它从字符串中检索字母数字标记。
然而,我需要的是还将具有数字和字母的标记分成只有一个或另一个的标记,例如。
re.split(pattern, "my t0kens")
会返回["my", "t", "0", "kens"]
。
我猜我可能需要使用lookahead / lookbehind,但我不确定这是否真的有必要或是否有更好的方法。
答案 0 :(得分:7)
尝试使用findall方法。
>>> print re.findall ('[^\d ]+', "my t0kens");
['my', 't', 'kens']
>>> print re.findall ('[\d]+', "my t0kens");
['0']
>>>
编辑:下面巴特的评论更好的方式。
>>> print re.findall('[a-zA-Z]+|\\d+', "my t0kens")
['my', 't', '0', 'kens']
>>>
答案 1 :(得分:2)
>>> [x for x in re.split(r'\s+|(\d+)',"my t0kens") if x]
['my', 't', '0', 'kens']
通过在模式中使用捕获括号,标记也将返回。由于您只想维护数字而不是空格,我将\s
留在括号外,以便返回None
,然后可以使用简单的循环过滤掉。{/ p>
答案 2 :(得分:1)
应该是一行代码
re.findall('[a-z]+|[\d]+', 'my t0kens')
答案 3 :(得分:0)
不完美,但从下面的列表中删除空间很简单: - )
re.split('([\d ])', 'my t0kens')
['my', ' ', 't', '0', 'kens']
docs:“按模式的出现拆分字符串。如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。”