Python 中是否有一个现有的函数可以像 .strip()
/.lstrip()
/.rstrip()
那样工作,而是返回剥离的空格而不是生成的剥离字符串?
即:
test_str = 'nttext goes here'
test_str.lstrip() # yields 'text goes here'
test_str.lwhite() # yields 'nt'
其中.white()
、.lwhite()
和.rwhite()
是我希望存在的函数。否则,我将不得不使用正则表达式和捕获的组:
^(s*).*(s*)$ for .white()
^(s*) for .lwhite()
(s*)$ for .rwhite()
为了给出一个更好的例子,Python 有.strip()
方法,可以删除给定字符串开头和结尾的空格并返回剥离的字符串。与 Python 的 .lstrip()
和 .rstrip()
方法相同,分别是开始和结束。
我正在寻找一种方法来返回从字符串末端剥离的空格。因此,对于如下所示的字符串...
sample = 'nt this stringt is n ta samplet!n'
。我希望'nt '
返回为起始版本,'n'
返回为结束版本,或在为完整版本返回的列表中两者兼而有之。
谢谢大家!
哎呀,我刚刚意识到你的意思是剥离而不是拆分,所以这是一个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
的填充代码如下:
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
我可能从字面上理解你的话 - 但如果你只想在字符串中获取空格,那么列表理解不是要走的路吗?
In [112]: x
Out[112]: 'nttext goes here'
In [113]: ''.join([i for i in x if not i.isalnum()]).replace(" ",'')
Out[113]: 'nt'