Python 如何在不使用strip()函数的情况下删除或去除空白?
编写一个函数,该函数接受由字母组成的输入字符串 字符,并删除字符串的所有前导空格和 返回它而不使用.strip()。例如,如果: 输入字符串=“你好” 然后,您的函数应返回一个字符串,如: 输出字符串=“你好” 下面是我在不使用strip的情况下删除空白的程序:Python 如何在不使用strip()函数的情况下删除或去除空白?,python,python-3.x,Python,Python 3.x,编写一个函数,该函数接受由字母组成的输入字符串 字符,并删除字符串的所有前导空格和 返回它而不使用.strip()。例如,如果: 输入字符串=“你好” 然后,您的函数应返回一个字符串,如: 输出字符串=“你好” 下面是我在不使用strip的情况下删除空白的程序: def Leading_White_Space (input_str): length = len(input_str) i = 0 while (length): if(input_str[i]
def Leading_White_Space (input_str):
length = len(input_str)
i = 0
while (length):
if(input_str[i] == " "):
input_str.remove()
i =+ 1
length -= 1
#Main Program
input_str = " Hello "
result = Leading_White_Space (input_str)
print (result)
我选择了remove函数,因为它很容易去掉字符串“Hello”之前的空白。程序还告诉我们,只需在实际字符串之前消除空格。根据我的逻辑,我认为它不仅消除了前导空格,还消除了尾随空格。任何帮助都将不胜感激。使用
re.sub
>>> input_string = " Hello "
>>> re.sub(r'^\s+', '', input_string)
'Hello '
或
您可以在字符串的字符上循环,并在到达非空格字符时停止。这里有一个解决方案:
def Leading_White_Space(input_str):
for i, c in enumerate(input_str):
if c != ' ':
return input_str[i:]
编辑:
@PM 2Ring提到了一个很好的观点。如果要处理所有类型的空白(例如\t、\n、\r),则需要使用,因此正确的解决方案可能是:
def Leading_White_Space(input_str):
for i, c in enumerate(input_str):
if not c.isspace():
return input_str[i:]
为了更彻底,并且不使用其他模块,我们还可以指定要删除的空白(前导、尾随、两者或全部),包括制表符和新行字符。我使用的代码(由于明显的原因,没有其他答案那么紧凑)如下所示,并使用了切片:
def no_ws(string,which='left'):
"""
Which takes the value of 'left'/'right'/'both'/'all' to remove relevant
whitespace.
"""
remove_chars = (' ','\n','\t')
first_char = 0; last_char = 0
if which in ['left','both']:
for idx,letter in enumerate(string):
if not first_char and letter not in remove_chars:
first_char = idx
break
if which == 'left':
return string[first_char:]
if which in ['right','both']:
for idx,letter in enumerate(string[::-1]):
if not last_char and letter not in remove_chars:
last_char = -(idx + 1)
break
return string[first_char:last_char+1]
if which == 'all':
return ''.join([s for s in string if s not in remove_chars])
这里有另一种去除前导空格的方法,它实际上去除了所有前导空格,而不仅仅是
'
空格字符。不必费心跟踪字符串中字符的索引,我们只需要一个标志,让我们知道何时停止检查空白
def my_lstrip(input_str):
leading = True
for ch in input_str:
if leading:
# All the chars read so far have been whitespace
if not ch.isspace():
# The leading whitespace is finished
leading = False
# Start saving chars
result = ch
else:
# We're past the whitespace, copy everything
result += ch
return result
# test
input_str = " \n \t Hello "
result = my_lstrip(input_str)
print(repr(result))
输出
'Hello '
还有很多其他方法可以做到这一点。当然,在实际的程序中,您只需使用string
.lstrip
方法,但这里有几种使用迭代器的可爱方法:
def my_lstrip(input_str):
it = iter(input_str)
for ch in it:
if not ch.isspace():
break
return ch + ''.join(it)
及
可以使用删除字符串开头的所有特殊字符,如下所示
import itertools
def my_lstrip(input_str,remove=" \n\t"):
return "".join( itertools.dropwhile(lambda x:x in remove,input_str))
为了使它更灵活,我添加了一个名为remove的附加参数,它们表示要从字符串中删除的字符,默认值为“\n\t”
,然后使用dropwhile,它将忽略remove中的所有字符,为了检查这一点,我使用了一个函数(这是一种写短匿名函数的实用形式)
这里有一些测试
>>> my_lstrip(" \n \t Hello ")
'Hello '
>>> my_lstrip(" Hello ")
'Hello '
>>> my_lstrip(" \n \t Hello ")
'Hello '
>>> my_lstrip("--- Hello ","-")
' Hello '
>>> my_lstrip("--- Hello ","- ")
'Hello '
>>> my_lstrip("- - - Hello ","- ")
'Hello '
>>>
前面的函数相当于
def my_lstrip(input_str,remove=" \n\t"):
i=0
for i,x in enumerate(input_str):
if x not in remove:
break
return input_str[i:]
请尝试
lstrip
……我无法使用功能条()。请阅读问题。试着去掉空格,直到找到一个字母字符。我会试试看。@PaulRooney不太可能:如果它没有死于属性错误,它会返回None
。如果您可以就地修改字符串,则不需要返回结果。但是当然,你不会像result=Leading_White_Space(input_str)
那样称呼它。我也喜欢你的lstrip()
答案,从技术上讲,它不是strip()
。老兄,我是python新手,所以我发现理解代码有点困难。请注意,任务是删除所有的前导空格字符,不仅仅是空格字符。在我的答案中的测试字符串上尝试你的代码。在ASCII中,标准的空白字符是'\t\n\x0b\x0c\r'
(请参阅标准字符串
模块中的常量)。在Unicode中,有更多的空格字符,该方法可以识别这些字符,但我想我们可以忽略它们。
>>> my_lstrip(" \n \t Hello ")
'Hello '
>>> my_lstrip(" Hello ")
'Hello '
>>> my_lstrip(" \n \t Hello ")
'Hello '
>>> my_lstrip("--- Hello ","-")
' Hello '
>>> my_lstrip("--- Hello ","- ")
'Hello '
>>> my_lstrip("- - - Hello ","- ")
'Hello '
>>>
def my_lstrip(input_str,remove=" \n\t"):
i=0
for i,x in enumerate(input_str):
if x not in remove:
break
return input_str[i:]