假设我们有一个Python的Unicode字符串:
s = u"abc你好def啊"
现在我想按非ASCII字符拆分,结果如下:
result = ["abc", "你好", "def", "啊"]
那么,如何实现呢?
s = u"abc你好def啊"
现在我想按非ASCII字符拆分,结果如下:
result = ["abc", "你好", "def", "啊"]
那么,如何实现呢?
使用正则表达式,您可以简单地在“有或没有”a-z字符之间拆分。
>>> import re
>>> re.findall('([a-zA-Z0-9]+|[^a-zA-Z0-9]+)', u"abc你好def啊")
["abc", "你好", "def", "啊"]
>>> ascii = ''.join(chr(x) for x in range(33, 127))
>>> re.findall('([{}]+|[^{}]+)'.format(ascii, ascii), u"abc你好def啊")
['abc', '你好', 'def', '啊']
>>> re.findall('([ -~]+|[^ -~]+)', u"abc你好def啊")
['abc', '你好', 'def', '啊']
[ -~]
。 :) - Dolda2000你可以这样做:
s = u"abc你好def啊"
status = ord(s[0]) < 128
word = ""
res =[]
for b, letter in zip([ ord(c) < 128 for c in s ], s):
if b != status:
res.append(word)
status = b
word = ""
word += letter
res.append(word)
print res
>> ["abc", "你好", "def", "啊"]
s = "abc你好def啊"
filter(None, re.split('(\w+|\W+)', s))
适用于Python 2.x版本的工作
- C14Llist(filter(None, re.split('(\w+|\W+)', s))) 结果 ['abc你好def啊']
[u'abc', u'\u4f60\u597d', u'def', u'\u554a']
,你可以再检查一下吗? - minocha['abc你好def啊']
。也许是Python 2和3之间的差异?(顺便说一句,我没有给你的回答点踩) - C14Lfilter
对象强制转换为 list
后只会得到一个项目。在 Py2 中,就像你所说的那样,我会得到 list
。 - C14Lrange()
)。 - tripleee