这是您希望正则表达式“lookaround assertions”...长度为零(模式捕获语义)的情况之一。
这样做可以让您匹配在替代中“重叠”的情况。
这是一个例子:
#!python
import re
num = '123,456,7,8.012,345,6,7,8'
pattern = re.compile(r'(?<=\d),(?=\d)')
pattern.sub('',num)
# >>> '12345678.012345678'
...请注意,我正在使用 re.compile() 以使其更具可读性,并且还因为这种使用模式在许多情况下可能会表现得更好。我使用与@Psidom 相同的正则表达式;但我使用的是 Python 的“原始”字符串,这是在 Python 中表达正则表达式的更常见的方式。
我特意使用了一个例子,如果我使用正则表达式,逗号的间距会重叠,例如; re.compile(r'(\d),(\d)') 并尝试使用对捕获字符的反向引用进行替换 pattern.sub(r'\1\2', num) ... 适用于许多示例;但 '1,2,3' 不匹配,因为捕获导致它们重叠。
这是存在这些“环视”(前瞻和后瞻)断言的主要原因之一......以避免由于捕获和重叠语义而不得不重复/递归应用模式的情况。这些断言不捕获,它们匹配“零”字符(如一些 PCRE 元模式,如 \b ...匹配单词之间的零长度边界而不是任何空格(\s 哪个或非“单词”(\W)字符分隔单词)。