【发布时间】: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)?