我必须用连字符替换所有出现的模式,例如 c-c-c-c-come
或 oh-oh-oh-oh
等,并使用最后一个标记,即 来
或哦
在此示例中,其中
- 连字符之间的字符数是任意的,可以是一个或多个字符
- 要匹配的标记是连字符中的最后一个标记,因此
come
为c-c-come
。 输入字符串可能会出现一次或多次,如以下句子:
c-c-c-c-今天回家c-c-c-c-到我这里来
哦-哦-哦-哦,生活真糟糕哦-哦-哦-哦
需要通过
finditer
找到匹配token的起始和结束位置r = re.compile(pattern, flags=re.I | re.X | re.UNICODE) for m in r.finditer(text): word=m.group() characterOffsetBegin=m.start() characterOffsetEnd=m.end() # now replace and store indexes
[更新]
假设那些连字符的单词不属于固定字典,我向它添加这个约束:
- 连字符之间的字符数必须在最小到最大范围内,例如
{1,3}
,以便捕获组必须与c-come
匹配,或者c-c-come
,但不是像fine-tuning
或inter-face
等连字符的真实单词。
最佳答案
您只需使用 re.sub()
即可替换所有内容,而无需迭代匹配的索引:
import re
s = 'c-c-c-c-come to home today c-c-c-c-come to me'
print(re.sub(r'(\w+(?:-))+(\w+)', '\\2', s))
# come to home today come to me
关于Python查找所有出现的连字符单词并替换该位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56448068/