替换字符之间的点

Jor*_*evo 3 python regex

因此,当在点之前没有空格时,我想要在字符串中使用子点.我认为这可以通过正则表达式轻松完成,但我无法做到.

我有模式,我希望它们是:

  • h.e.ll.o w.o.r.l.d: hello world
  • h.e.ll.o w.o.r.l.d: hello world
  • hello. world: hello. world

我尝试了以下模式:

\w+(\.)+\w+
\w+(\.+\w+)
\w+\.+\w+
Run Code Online (Sandbox Code Playgroud)

我总是得到这样的东西: he.ll.o wo.rl.d

我使用python的re模块来匹配和替换以下代码:

>>> re.sub(r'\w+\.+\w+', lambda x: x.group(0).replace('.', ''), 'h.e.ll.o w.o.r.l.d')
'he.llo wo.rl.d'
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 12

在你的所有模式中,你在点之后使用一个char,所以没有机会在下一次迭代\w+中将它与第一次匹配(因为它必须消耗至少1个字符char).

要修复你的方法,你可以匹配1个单词字符,然后是1个重复,.然后是1个单词字符:

re.sub(r'\w+(?:\.+\w+)*', lambda x: x.group(0).replace('.', ''), s)
Run Code Online (Sandbox Code Playgroud)

这是Python演示.

一种.在字符之间删除的方法

re.sub(r'\b\.\b', '', s)
Run Code Online (Sandbox Code Playgroud)

看到这个正则表达式演示.在这里,.只有在字符字符内时才匹配.

或者,您可以使用此方法匹配任何.未用空格包围的内容:

re.sub(r'(?<!\s)\.(?!\s)', '', 'h.e.ll.o w.o.r.l.d')
Run Code Online (Sandbox Code Playgroud)

请参阅Python演示正则表达式演示.

细节

  • (?<!\s) - 如果当前位置的左侧有一个空格,则会导致匹配失败的负面后观
  • \. - 一个点
  • (?!\s) - 如果当前位置右侧有空格,则表示匹配失败的否定前瞻.