Python中的现有函数是否像.strip()
/ .lstrip()
/ .rstrip()
那样工作,而是返回剥离的空格而不是生成的剥离字符串?
即:
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()
个方法可以删除给定字符串开头和结尾的空格并返回被剥离的字符串。与Python的.lstrip()
和.rstrip()
方法相同,仅分别为开头和结尾。
我正在寻找一种方法来返回从字符串末尾剥离的空格。所以对于像下面这样的字符串......
sample = '\n\t this string\t is \n \ta sample\t!\n'
...我希望'\n\t '
返回初始版本,'\n'
返回结束版本,或者两者都返回完整版本返回的列表。
全部谢谢!
答案 0 :(得分:2)
哎呀,我刚才意识到你的意思是剥离而不是分裂,所以这里有一个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
答案 1 :(得分:1)
我可能在字面上理解你的话 - 但是如果你只想获得字符串中的空格,那么列表理解是不是要走的路?
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'