string.split()的异常行为

时间:2019-02-12 01:56:27

标签: python regex whitespace

说我有一个字符串,string = 'a'

我做string.split(),我得到['a']

我不想要这个,我只想在字符串ala string = 'a b c d'中有空格时使用一个列表

到目前为止,我已经尝试了以下所有方法,但是没有运气:

>>> a = 'a'
>>> a.split()
['a']
>>> a = 'a b'
>>> a.split(' ')
['a', 'b']
>>> a = 'a'
>>> a.split(' ')
['a']
>>> import re
>>> re.findall(r'\S+', a)
['a']
>>> re.findall(r'\S', a)
['a']
>>> re.findall(r'\S+', a)
['a', 'b']
>>> re.split(r'\s+', a)
['a', 'b']
>>> a = 'a'
>>> re.split(r'\s+', a)
['a']
>>> a.split(" ")
['a']
>>> a = "a"
>>> a.split(" ")
['a']
>>> a.strip().split(" ")
['a']
>>> a = "a".strip()
>>> a.split(" ")
['a']

我疯了吗?我在字符串“ a”中看不到空格。

>>> r"[^\S\n\t]+"
'[^\\S\\n\\t]+'
>>> print(re.findall(r'[^\S\n\t]+',a))
[]

怎么了?

EDIT

FWIW,这就是我所需要的东西:

# test for linked array
if typename == 'org.apache.ctakes.typesystem.type.textsem.ProcedureMention':
    for f in AnnotationType.all_features:
        if 'Array' in f.rangeTypeName:
            if attributes.get(f.name) and typesystem.get_type(f.elementType):
                print([ int(i) for i in attributes[f.name].split() ])

到此结束...

3 个答案:

答案 0 :(得分:2)

拆分将始终返回列表,请尝试此操作。

def split_it(s):
    if len(s.split()) > 1:
        return s.split()
    else:
        return s

答案 1 :(得分:1)

split的行为很有意义,它总是返回一个列表。为什么不只检查列表长度是否为1?

def weird_split(a):
    words = a.split()
    if len(words) == 1:
        return words[0]
    return words

答案 2 :(得分:0)

您可以使用条件表达式来检查是否存在空格,并且仅在检测到空格时才使用split

str1 = 'abc'
split_str1 = str1 if (' ' not in str1) else str1.split(' ')
print (split_str1)
str1 = 'ab c'
split_str1 = str1 if (' ' not in str1) else str1.split(' ')
print (split_str1)

这将给出输出:

abc
['ab', 'c']