【问题标题】:replace a single whitespace without replacing multiple whitespaces (Python)替换单个空格而不替换多个空格(Python)
【发布时间】:2018-10-26 19:09:50
【问题描述】:

这似乎是一项微不足道的任务,但是我找不到使用 python 执行此操作的解决方案。

给定以下字符串:

"Lorem/ipsum/dolor/sit         amet consetetur"

我想输出

"Lorem/ipsum/dolor/sit         ametconsetetur"

因此,删除 ametconsetetur 之间的单个空格。

使用.replace(" ","") 替换所有空格,给我:

"Lorem/ipsum/dolor/sitametconsetetur"

这不是我想要的。我该如何解决这个问题?

【问题讨论】:

  • 我们大多数人会使用正则表达式 (regex) 来查找被非空格包围的单个空格。将“Python 正则表达式”输入您的搜索引擎并选择一个方便的教程。
  • .. 或等待大约 15 秒 ...
  • @timgeb 这并不意味着这不是重复的。只是,不是那个。
  • 好吧,然后它会重新打开,直到有人找到更好的目标。 :)
  • @timgeb 明智的决定。我试图寻找更好的目标,但谷歌不是我的朋友。可能有一个,但隐藏得很好。如果有人发现了一个好的骗子,只要 ping 我,我就会关闭

标签: python


【解决方案1】:

使用正则表达式和单词边界:

>>> s="Lorem/ipsum/dolor/sit         amet consetetur"
>>> import re
>>> re.sub(r"\b \b","",s)
'Lorem/ipsum/dolor/sit         ametconsetetur'
>>>

这种技术还可以处理更一般的情况:

>>> s="Lorem/ipsum/dolor/sit         amet consetetur      adipisci velit"
>>> re.sub(r"\b \b","",s)
'Lorem/ipsum/dolor/sit         ametconsetetur      adipiscivelit'

对于开始和结束空间,你必须稍微努力,但它仍然是可行的:

>>> s=" Lorem/ipsum/dolor/sit         amet consetetur      adipisci velit "
>>> re.sub(r"(^|\b) (\b|$)","",s)
'Lorem/ipsum/dolor/sit         ametconsetetur      adipiscivelit'

只是为了好玩,最后一个变体:使用带有多个空格分隔的re.split,使用组保留拆分字符,然后再次加入字符串,仅当字符串中有一些非空格时才删除空格:

"".join([x if x.isspace() else x.replace(" ","") for x in re.split("( {2,})",s)])

(我想这会因为列表创建和加入而变慢)

【讨论】:

  • 你也可以使用:re.sub()text = "Lorem/ipsum/dolor/sit amet consetetur"re.sub(" ", "", text, 1)
  • 错误,不,这不起作用。你试过了吗?它将替换 OP 不想替换的众多空间之一,使 amet 和 consetetur 之间的空间保持不变......
【解决方案2】:
s[::-1].replace(' ', '', 1)[::-1]
  • 反转字符串
  • 删除第一个空格
  • 把字符串倒过来

【讨论】:

  • 这可能适用于这种非常特殊的情况,但绝不是通用解决方案。
  • 是的,当然,我不是要解决一般问题。在这种情况下,OP 没有提供足够的信息来确定“一般问题”是什么。如果您阅读该问题,您会看到他们要求替换单个空格,这就是这样做的。
  • 您的解决方案替换了 last 空格。如果它也在最后,它将替换多空格字符串中的最后一个空格。 OP 示例没有很好地选择,同意但问题很明确“替换单个空格而不替换多个空格”
【解决方案3】:
import re
a="Lorem/ipsum/dolor/sit         amet consetetur"
print(re.sub('(\w)\s{1}(\w)',r'\1\2',a))

【讨论】:

  • 感谢您提供代码 sn-p,它可能会提供一些有限的即时帮助。通过描述为什么这是解决问题的好方法,正确的解释将极大地改进其long-term value,并使其对有其他类似问题的未来读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多