替换字符之间的点

2024-05-15 01:15:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想在点后面没有空格的情况下替换字符串中的点。我原以为用正则表达式可以很容易地做到这一点,但我一直没能做到。你知道吗

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

  • h.e.ll.o w.o.r.l.dhello world
  • h.e.ll.o w.o.r.l.dhello world
  • hello. worldhello. world

我尝试了以下模式:

\w+(\.)+\w+
\w+(\.+\w+)
\w+\.+\w+

我总是得到这样的东西: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'

Tags: 模块lambda字符串代码rehelloworld模式
2条回答

这就是我的方法。你知道吗

re.sub(r'\.(?=\w)', '', 'h.e.ll.o. w.o.r.l.d')

  • \.一个点
  • (?=\w)向前看:检查点后面是否有\w。你知道吗

在所有模式中,您都会在点之后使用一个字符,因此在下一次迭代中没有机会将其与第一个\w+匹配(因为它必须至少使用一个单词字符)。你知道吗

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

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

这是Python demo。你知道吗

另一种去除单词字符之间.方法是

re.sub(r'\b\.\b', '', s)

this regex demo。这里,.只在单词字符内匹配。你知道吗

或者,您可以使用这种方法来匹配任何没有用空格括起来的.

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

请参见Python demoregex demo。你知道吗

细节

  • (?<!\s)-如果当前位置的左边有一个空格,则匹配失败的负lookback
  • \.-一个点
  • (?!\s)-如果当前位置的右侧有一个空格,则会导致匹配失败的负向前看。你知道吗

相关问题 更多 >

    热门问题