Regex 使用正则表达式删除两个字符之间的空格

Regex 使用正则表达式删除两个字符之间的空格,regex,python-3.x,Regex,Python 3.x,我正在寻找删除句子任何部分两个字符之间的空格。例如,以下短语: R Z EXCAVATING AND LOGGING EXCAVATING R Z AND LOGGING 应该成为 RZ EXCAVATING AND LOGGING EXCAVATING RZ AND LOGGING 我尝试了下面的正则表达式([A-Z](.*?[A-Z]),但我无法消除两个字符之间的空格 有什么想法吗?你可以用 text = re.sub(r'\b([A-Z])\s+(?=[A-Z]\b)', r'\1',

我正在寻找删除句子任何部分两个字符之间的空格。例如,以下短语:

R Z EXCAVATING AND LOGGING
EXCAVATING R Z AND LOGGING
应该成为

RZ EXCAVATING AND LOGGING
EXCAVATING RZ AND LOGGING
我尝试了下面的正则表达式
([A-Z](.*?[A-Z])
,但我无法消除两个字符之间的空格

有什么想法吗?

你可以用

text = re.sub(r'\b([A-Z])\s+(?=[A-Z]\b)', r'\1', text)

详细信息

  • \b
    -单词边界
  • ([A-Z])
    -捕获组1:大写字母
  • \s+
    -1+空格
  • (?=[A-Z]\b)
    -紧接着是大写字母,后面不是单词字符(字母、数字,

re.sub(r'([A-Z])\s+(?=[A-Z]),r'\1',text)
?感谢Wiktor,获得
RZ挖掘和记录
RZ挖掘和记录
应转换为
RZ挖掘和记录
。R和Z之间的空间消失了。OP需要理解“单词边界”的含义。此解决方案可能会给您带来意想不到的结果:
AB-C D EF
将变成
AB-CD EF
(就在
-
之后也被认为是单词边界。类似于其他非单词字符)。另一个可能的问题是
AB C D E FG
将变成
AB CDE FG
(这意味着不必是2个字符)。@AdrianShum单词边界取决于上下文,正确。如果需要空白边界,
re.sub(r'(?不是批评你的答案,只是提出了OP可能不知道的一些边缘情况。)顺便说一句,第二种选择也很好,稍微改变一下,它可以避免组合2个以上的单字符,以防OP需要:
re.sub(r'(?@AdrianShum这不是一个调整,您错误地删除了前瞻,将找不到重叠的(连续的)匹配。这不是错误的,而是故意的:目的是只允许组合2个单个字符(好吧,这取决于OP的预期行为)