Python查找所有出现的连字符单词并替换该位置

标签 python regex

我必须用连字符替换所有出现的模式,例如 c-c-c-c-comeoh-oh-oh-oh 等,并使用最后一个标记,即 在此示例中,其中

  • 连字符之间的字符数是任意的,可以是一个或多个字符
  • 要匹配的标记是连字符中的最后一个标记,因此 comec-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-tuninginter-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/

相关文章:

php - 从文件中获取图像名称的正则表达式

python - 将 numpy 数组重新排序为新的位长度元素,无需循环

python - 如何在 OpenShift 上使用 mongohq 或 mongolab

python - 为什么这个 Python 正则表达式代码只找到空结果?

java - 如何替换字符串中的不同文本

php - 如何获取自定义标签的值和标签之间的值

php - 如何使用 preg_replace 附加或替换尾随问号?

python - 使用 value() 时过滤 Django 查询集的相关 ManyToMany 字段

python - Sentry 不断返回不存在的事件 ID

python - __future__ import with_statement 需要哪个 python 版本?