我必须用连字符替换所有出现的模式c-c-c-c-come
or oh-oh-oh-oh
等与最后一个标记即come
or oh
在此示例中,其中
- 连字符之间的字符数是任意的,可以是一个或多个字符
- 要匹配的标记是连字符中的最后一个标记,因此
come
in c-c-come
.
-
输入字符串可能会出现一次或多次,如以下句子:
c-c-c-c-come to home today c-c-c-c-come to me
oh-oh-oh-oh it's a bad life oh-oh-oh-oh
-
需要通过以下方式找到匹配令牌的开始和结束位置finditer
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
[UPDATE]
假设这些连字符的单词不属于固定字典,我向其添加以下约束:
- 连字符之间的字符数必须介于最小到最大之间,例如
{1,3}
这样捕获组必须匹配c-come
, or c-c-come
,但不是像这样的连字符真实单词fine-tuning
或者喜欢inter-face
, etc.
你可以只使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)