return 去除字符串空白的函数

Function to return the stripped whitespace of a string

Python 中是否存在像 .strip()/.lstrip()/.rstrip() 那样工作的现有函数,但是 return 是剥离的空白而不是生成的剥离字符串?

即:

test_str = '\n\ttext goes here'
test_str.lstrip() # yields 'text goes here'
test_str.lwhite() # yields '\n\t'

其中 .white().lwhite().rwhite() 是我希望存在的函数。否则我将不得不使用正则表达式和捕获的组:

^(\s*).*(\s*)$    for .white()
^(\s*)            for .lwhite()
(\s*)$            for .rwhite()

举个更好的例子,Python 有 .strip() 方法可以删除给定字符串开头和结尾的空格,并 return 删除字符串。与 Python 的 .lstrip().rstrip() 方法相同,分别用于开头和结尾。

我正在寻找一种方法来 return 从字符串的末端剥离的空白。所以对于像下面这样的字符串...

sample = '\n\t this string\t is \n \ta sample\t!\n'

...我想要 '\n\t ' returned 作为开始版本,'\n' returned 作为结束版本,或者两者都在列表中 return编辑了完整版。

谢谢大家!

我可能是按字面意思理解你的话 - 但如果你只想获得字符串中的空格,那么列表理解不是可行的方法吗?

In [112]: x
Out[112]: '\n\ttext goes here'

In [113]: ''.join([i for i in x if not i.isalnum()]).replace(" ",'')
Out[113]: '\n\t'

糟糕,我刚刚意识到你的意思是剥离而不是拆分,所以这是一个 itertools.takewhile 解决方案:

from itertools import takewhile

def lstripped(s):
    return ''.join(takewhile(str.isspace, s))

def rstripped(s):
    return ''.join(reversed(tuple(takewhile(str.isspace, reversed(s)))))

def stripped(s):
    return lstripped(s), rstripped(s)

itertools.takewhile 的 polyfill 如下:

def takewhile(predicate, iterable):
    # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
    for x in iterable:
        if predicate(x):
            yield x
        else:
            break