从字符串中删除尾随空格的python方法是什么?

2024-09-30 01:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

函数的参数满足以下规则:

  1. 它没有任何前导空格
  2. 它可能有尾随空格
  3. 字符串中可能有交错的空格。在

目标:删除交错的重复空白,并去除尾随的空白。在

我现在是这样做的:

# toks - a priori no leading space
def squeeze(toks):
  import re
  p = re.compile(r'\W+')
  a = p.split( toks ) 
  for i in range(0, len(a)):
    if len(a[i]) == 0:
      del a[i]
  return ' '.join(a) 

>>> toks( '  Mary  Decker   is hot   ' )
Mary Decker is hot

这能改进吗?Python够了吗?在


Tags: 函数字符串re目标参数lenis规则
3条回答

我会这样做:

" ".join(toks.split())

在这个问题中是否有潜意识的信息?;—)

按字面意思回答你的问题:

是的,可以改进。第一个改进就是让它发挥作用。在

>>> squeeze('x    !    y')
'x y' # oops

问题1:当您应该使用\s+(空白字符)时,您使用的是\W+(非单词字符)

^{pr2}$

问题2:删除空字符串的循环可以工作,,但这只是偶然的。如果您想要一个通用循环来原位删除空字符串,那么您需要反向操作,否则您的下标i将与剩余的元素数量不符。它在这里起作用是因为重新分割()如果没有捕获组,则只能在开始和结束处生成空元素。您已经定义了开始问题,而结束情况不会导致问题,因为之前没有删除。所以你会看到一个非常难看的循环,可以用两条线来代替:

if a and not a[-1]: # guard against empty list
    del a[-1]

但是,除非您的字符串很长,并且您担心速度(在这种情况下,您可能不应该使用re),否则您可能希望允许前导空格(通常会忽略“我的数据没有前导空格”之类的断言),并且只需在循环中动态执行:

a = [x for x in p.split(toks) if x]

下一步是避免构建列表a

return ' '.join(x for x in p.split(toks) if x)

现在你提到了“Python”。。。所以,让我们抛开所有重新导入和编译开销的东西,还有genxp,只需这样做:

return ' '.join(toks.split())

不能使用rstrip()吗?在

some_string.rstrip() 

或者strip()来从两边剥离字符串?在

另外:strip()方法还支持传入任意strip字符:

^{pr2}$

相关:如果需要去掉中间的空白:拆分字符串,去掉这些术语,然后重新连接它。在

阅读API有帮助!在

相关问题 更多 >

    热门问题