【问题标题】:Simplest way to convert single space words to more than 1 space将单个空格单词转换为超过 1 个空格的最简单方法
【发布时间】:2020-05-11 03:20:53
【问题描述】:

假设我有字符串:

This  is  12345  string  with  code  5435 / 23566  on  13/12/2018 SIN, SGD   Ok, KL

我想要:

This  is  12345  string  with  code  5435 / 23566  on  13/12/2018  SIN, SGD   Ok, KL

差异是第一个在“13/12/2018”和“SIN, SGD”之间只有 1 个空格,而第二个则超过 1 个空格。

单词被定义为任何两边都有空格的字母数字字符(除非它的第一个或最后一个单词)。如果中间或 / 之间有逗号,则认为它是同一个单词的一部分。例如

“SIN, SGD”或“Ok, KL”或“5435 / 23566”被认为是一个词作为 / 或 ,被认为是同一个词的一部分。

所以在单词之间添加多个空格并将单词内部的空格保持为单个空格,这样当我这样做时

re.split(r'\s{2,}', s.strip) 

在最后一个字符串上,我应该得到:

['This',
 'is',
 '12345',
 'string',
 'with',
 'code',
 '5435 / 23566',
 'on',
 '13/12/2018',
 'SIN, SGD',
 'Ok, KL']

试过这个:

re.sub("\b ", "\s{2,}", s)

抛出错误

bad escape \s at position 0

【问题讨论】:

  • 目前还不清楚你想把哪个单空格变成双空格。例如Ok, KL 保留为单个空格。为什么? 13/12/2018 SIN 有什么特别之处?
  • 是的。查看输出。它保持不变。这是一个字。我想将单词之间的单个空格替换为多个空格。所以当我对最终输出进行拆分时,它应该给出如上所示的结果列表
  • Ok, KL 不是我见过的任何“单词”定义的单词。
  • 我把那个例子放在那里是为了清楚地表明有 / 或 , 的东西被视为一个词,它们之间的空格不应该加倍。
  • 也许你只是想要re.sub(r'\b\s\b', ' ', s)

标签: python regex


【解决方案1】:

这是一个工作示例

s="This  is  12345  string  with  code  5435 / 23566  on  13/12/2018 SIN, SGD   Ok, KL"  
print(s.replace(" ","  "))

在上面的例子中,它将用双空格代替单空格。 我希望这会正常工作

【讨论】:

  • 这会将所有单空格替换为双空格。我想用双精度替换单词之间的单,并且单词由任何内容(字母,“,”,“\”或数字)定义。所以上面的SIN、SGD就是一个字。好的,KL也是一样。 5435 / 23566 相同。13/12/2018 SIN SGD 之间只有一个空格。我想和其他人一样有两个空间
【解决方案2】:

您可以匹配所有值,而不是使用拆分:

\w+(?:(?:, | */ *)\w+)*
  • \w+ 匹配 1+ 个单词字符
  • (?:非捕获组
    • (?:, | */ *) 匹配逗号和空格或匹配可选空格之间的/
    • \w+ 匹配 1+ 个单词字符
  • )*关闭组并重复0+次

Regex demo | Python demo

示例代码

import re

regex = r"\w+(?:(?:, | */ *)\w+)*"
test_str = "This  is  12345  string  with  code  5435 / 23566  on  13/12/2018 SIN, SGD   Ok, KL"

print(re.findall(regex, test_str))

输出

[
    'This'
    'is'
    '12345'
    'string'
    'with'
    'code'
    '5435 / 23566'
    'on'
    '13/12/2018'
    'SIN SGD'
    'Ok KL'
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多