正则表达式 - 查找两个连续的行仅在大小写上有所不同

时间:2016-05-25 09:49:06

标签: regex

我得到了一些看起来像这样的输入:


贝巴
bebebe
cacaca
Dododo
多多多

如何找到基本相同的连续(仅两个连续的)行,但在第一个字符的情况下只是不同。对于此示例 [Aa] baba &的 [DD] ododo

我想这可能取决于我使用的编辑器类型以及它使用哪种正则表达式(我尝试从Sublime文本开始,当然区分大小写):

^([A-Z])([a-z]+)\n\l\1\2

\l\1适用于使用初始小写字符替换第1组(至少在Sublime Text中),但在搜索此类模式时显然不一样。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:8)

您似乎正在寻找围绕第一个反向引用的内联任意内部模式不区分大小写的修饰符(?i:....)

^([A-Z])([a-z]+)\n(?i:\1)\2$
                  ^^^   ^

这将使第一个反向引用不区分大小写。

要支持任何换行样式,请使用\R代替\n

^([A-Z])([a-z]+)\R(?i:\1)\2$
                ^^

提升Modifiers reference

  

(?imsx-imsx ... )改变哪个perl修饰符在模式中有效,更改从第一次看到块并扩展到任何封闭的位置生效。在-之前打开perl修饰符的字母,之后的字母,将其关闭。

(?imsx-imsx:pattern)仅将指定的修饰符应用于图案。

enter image description here

模式详情

  • ^ - 开始一行(在Sublime Text和Notepad ++中,MUTLILINE模式默认开启)
  • ([A-Z]) - (第1组)第一个大写ASCII字母(将[A-Z]替换为\p{Lu}以匹配任何Unicode大写字母)
  • ([a-z]+) - (第2组)1个或多个小写ASCII字母(将[a-z]替换为\p{Ll}以匹配任何Unicode小写字母)
  • \R - 任何换行符(CRLFLFCR
  • (?i:\1) - 对第1组值不区分大小写的反向引用
  • \2 - 对第2组值进行区分大小写的反向引用
  • $ - 行/文件的结尾。