我想在像a.b.c.d(becomes abcd) 这样的词中省略点,但在某些情况下:
- 单词中至少应该有 2 个点,例如,
a.b仍然是a.b,但是a.b.c是匹配的。 - 这应该只匹配 1 或 2 个字母。例如,
a.bb.c是匹配项(因为a,bb和c分别是 1 或 2 个字母),但aaa.b.cc不是匹配项(因为aaa由 3 个字母组成)
这是我迄今为止尝试过的:
import re
texts = [
'a.b.c', # Should be: 'abc'
'ab.c.dd.ee', # Should be: 'abcddee'
'a.b' # Should remain: 'a.b'
]
for text in texts:
text = re.sub(r'((\.)(?P<word>[a-zA-Z]{1,2})){2,}', r'\g<word>', text)
print(text)
这将选择“任何点后跟 1 或 2 个字母”,重复 2 次或更多次。选择工作正常,但用组替换,只导致最后一场比赛,重复被忽略。
所以,它打印:
ac
abee
a.b
这不是我想要的。我会很感激任何帮助,谢谢。