【问题标题】:Python regex remove spaces only between two 1 letter wordsPython 正则表达式仅删除两个 1 字母单词之间的空格
【发布时间】:2017-11-18 04:59:39
【问题描述】:

我尝试编写一个这样的代码:

输入:“a b ccc”->“ab ccc”

输入:“aa bb”->“aa bb”

输入:“aa bb c d”->“aa bb cd”

我成功编写了一个正则表达式模板,可以找到“a b”的情况,但我不确定如何只删除空格。 这是我的尝试:

import re
sentence = "a b cc"
print(sentence)
pattern = re.compile(r'[^\s]{1}\s[^\s]{1}')
sentence = re.sub(pattern, 'xx', sentence)
print(sentence)

【问题讨论】:

  • 我不太清楚输入如何映射到输出...您想删除 1 个字母单词后的空格吗?
  • 是的,这就是我想要的
  • 如果你有'a b c d'。你想像'ab cd'一样加入吗?还是'abcd'?在我看来,这些规格并不完整。
  • 'a b c d' --> 'abcd' 'a b c d eee' --> 'abcd eee'
  • 'd eee' --> ?

标签: python regex


【解决方案1】:

你应该能够匹配这些词与

\b([a-z]) (?=[a-z]\b)

然后替换为

\g<1>

这将匹配单个字母单词(由单词边界确保)并捕获它。然后匹配一个空格并确保其后跟另一个单字母单词。替换的是第一个捕获的组。

Python

import re
sentence = "a b cc e ddd f g h"
pattern = re.compile(r'\b([a-z]) (?=[a-z]\b)', re.I)
sentence = re.sub(pattern, r'\g<1>', sentence)
print(sentence)

将输出ab cc e ddd fgh

另见https://regex101.com/r/y2chHw/1

【讨论】:

  • 仅供参考:\g&lt;1&gt; 可以在 re.sub 调用中替换为 r'\1'。由于这里没有歧义,\1 也可以很好地工作。
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 2021-01-06
  • 1970-01-01
  • 2013-11-17
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
相关资源
最近更新 更多