【问题标题】:Find two of the same character in a string with regular expressions使用正则表达式在字符串中查找两个相同的字符
【发布时间】:2010-12-24 12:27:41
【问题描述】:

这是参考我在here之前提出的一个问题

我收到了该问题中问题的解决方案,但最终需要为这个特定部分使用正则表达式。

我需要一个正则表达式来搜索和替换字符串中连续两个元音相同的实例,因此“took”中的“oo”或“bees”中的“ee”并将其替换为被替换的字母之一和:

一些预期行为示例:

"took" 应该变成"to:k"

"waaeek" 应该变成"wa:e:k"

"raaag" 应该变成"ra:ag"

感谢您的帮助。

【问题讨论】:

  • “raaaag”怎么样?是否应该更改为“ra:a:g”?
  • 是的,会的。应该从左到右阅读(默认情况下是这样吗?)

标签: python regex replace


【解决方案1】:

试试这个:

re.sub(r'([aeiou])\1', r'\1:', str)

【讨论】:

    【解决方案2】:

    搜索([aeiou])\1并将其替换为\1:

    我不了解 python,但您应该能够使用 /([aeiou])\1/gi 之类的东西使正则表达式不区分大小写和全局化

    【讨论】:

    • 感谢 SilentGhost 的编辑。我不知道 python 语法 - 只是按照通常的约定。
    【解决方案3】:

    不该做的事: 如前所述,这将匹配任意两个元音。将此答案作为不该做的示例。正确的答案(在这种情况下)是使用许多其他答案中提到的反向引用。

    import re
    
    data = ["took","waaeek","raaag"]
    
    for s in data:
      print re.sub(r'([aeiou]){2}',r'\1:',s)
    

    这恰好匹配集合 [aeiou] 的任何成员的两次出现 {2}。并用元音替换它,用括号 () 捕获并由 \1 后跟 ':'

    放置在子字符串中

    输出:

    to:k
    wa:e:k
    ra:ag
    

    【讨论】:

    • 这会将teak 更改为ta:k
    • 重复适用于字符类 - 因此任何两个连续的元音都会匹配。最后匹配的字符将被捕获(用 expresso 测试)。
    • 您每天都在这个网站上学到新东西。你说的很对。
    【解决方案4】:

    您需要在搜索表达式中使用反向引用。尝试类似:([a-z])+\1(或 ([a-z])\1 只是一个双倍)。

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 2012-05-19
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2011-06-11
      • 2014-09-17
      • 2012-05-27
      相关资源
      最近更新 更多