【发布时间】:2021-04-07 08:50:52
【问题描述】:
我想去掉单词中的点,使a.b.c.d变成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
这不是我想要的。我会很感激任何帮助,谢谢。
【问题讨论】:
标签: python regex regex-group python-re