所以我想在点后面没有空格的情况下替换字符串中的点。我原以为用正则表达式可以很容易地做到这一点,但我一直没能做到。你知道吗
我有模式,我希望它们是:
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+
我总是得到这样的东西: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'
这就是我的方法。你知道吗
re.sub(r'\.(?=\w)', '', 'h.e.ll.o. w.o.r.l.d')
\.
一个点(?=\w)
向前看:检查点后面是否有\w。你知道吗在所有模式中,您都会在点之后使用一个字符,因此在下一次迭代中没有机会将其与第一个
\w+
匹配(因为它必须至少使用一个单词字符)。你知道吗要修正您的方法,您可以匹配1+个单词字符,然后匹配1+个重复的
.
,然后匹配1+个单词字符:这是Python demo。你知道吗
另一种去除单词字符之间
.
的方法是见this regex demo。这里,
.
只在单词字符内匹配。你知道吗或者,您可以使用这种方法来匹配任何没有用空格括起来的
.
:请参见Python demo和regex demo。你知道吗
细节
(?<!\s)
-如果当前位置的左边有一个空格,则匹配失败的负lookback\.
-一个点(?!\s)
-如果当前位置的右侧有一个空格,则会导致匹配失败的负向前看。你知道吗相关问题 更多 >
编程相关推荐