因此,当在点之前没有空格时,我想要在字符串中使用子点.我认为这可以通过正则表达式轻松完成,但我无法做到.
我有模式,我希望它们是:
h.e.ll.o w.o.r.l.d: hello worldh.e.ll.o w.o.r.l.d: hello worldhello. 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)
细节
(?<!\s) - 如果当前位置的左侧有一个空格,则会导致匹配失败的负面后观\. - 一个点(?!\s) - 如果当前位置右侧有空格,则表示匹配失败的否定前瞻.| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |