Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的独立数字/字母标记_Python_Regex_Split - Fatal编程技术网

Python中的独立数字/字母标记

Python中的独立数字/字母标记,python,regex,split,Python,Regex,Split,我正在使用re.split()将字符串分隔为标记。当前我用作参数的模式是[^\dA-Za-z],它从字符串中检索字母数字标记 然而,我需要的是将同时包含数字和字母的标记拆分为只有一个或另一个的标记,例如 re.split(pattern, "my t0kens") 将返回[“my”、“t”、“0”、“kens”] 我猜我可能需要使用lookahead/lookahead,但我不确定这是否真的有必要,或者是否有更好的方法来做到这一点。不完美,但从下面的列表中删除空间很容易:-) :“按模式的出现

我正在使用
re.split()
将字符串分隔为标记。当前我用作参数的模式是
[^\dA-Za-z]
,它从字符串中检索字母数字标记

然而,我需要的是将同时包含数字和字母的标记拆分为只有一个或另一个的标记,例如

re.split(pattern, "my t0kens")
将返回
[“my”、“t”、“0”、“kens”]


我猜我可能需要使用lookahead/lookahead,但我不确定这是否真的有必要,或者是否有更好的方法来做到这一点。

不完美,但从下面的列表中删除空间很容易:-)


:“按模式的出现次数拆分字符串。如果模式中使用了捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。”

请改用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']
>>>

通过在模式中使用捕获括号,标记也将返回。由于您只想保留数字,而不想保留空格,因此我将
\s
放在括号外,因此返回
None
,然后可以使用简单的循环将其过滤掉。

应该是一行代码

re.findall('[a-z]+|[\d]+', 'my t0kens')

你可以把你的两个建议结合起来:
print re.findall(“[a-zA-Z]+\\\d+”,“my t0kens”)
,它返回:
['my','t','0','kens']
@Bart-是的,这样更好!有了巴特的编辑,这肯定比我的答案要好+1同样,建议对正则表达式使用原始字符串。没有必要逃避这些打击。e、 g.
r'[a-zA-Z]+|\d+'
多亏了@kjp和@Bart-编辑后的版本完全符合我的需要。如果只需检索单个数字,则此方法有效-一般情况下可能会有多个,如果我的示例误导了您,很抱歉。这很容易修复。答案已更新。当然,kjp答案中的解决方案更加优雅。用它来代替。
>>> [x for x in re.split(r'\s+|(\d+)',"my t0kens") if x]
['my', 't', '0', 'kens']
re.findall('[a-z]+|[\d]+', 'my t0kens')