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
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