Regex 正则表达式:为什么不‘;这不能捕捉到多次出现的双字母吗?
我想写一个正则表达式,让我能够找到包含三个或更多双字母(“oo”、“ss”、“tt”等)的文本文件中的所有行。下面是一个命令,我成功地使用它来查找包含两个或更多双字母的行:Regex 正则表达式:为什么不‘;这不能捕捉到多次出现的双字母吗?,regex,Regex,我想写一个正则表达式,让我能够找到包含三个或更多双字母(“oo”、“ss”、“tt”等)的文本文件中的所有行。下面是一个命令,我成功地使用它来查找包含两个或更多双字母的行: egrep ‘(([A-Za-z])\2.*){2,}’ sherlock.txt 运行此命令生成的行的一个示例如下: I had seen little of Holmes lately. My marriage had drifted us away from each 这一行实际上包含三个双字母(“ee”、“tt”
egrep ‘(([A-Za-z])\2.*){2,}’ sherlock.txt
运行此命令生成的行的一个示例如下:
I had seen little of Holmes lately. My marriage had drifted us away from each
这一行实际上包含三个双字母(“ee”、“tt”和“rr”)。但是,当我使用以下命令打印包含三个或更多双字母的行时,没有输出:
egrep ‘(([A-Za-z])\2.*){3,}’ sherlock.txt
为什么这个代码不起作用?我遗漏了什么?由于您没有提供您正在使用的语言/工具,下面是一个perl oneliner,它可以完成这项工作: 输入文件:
cat file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
Perl:
cat file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
输出:
cat file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt
I had seen little of Holmes lately. My marriage had drifted us away from each
([A-Za-z])\2.*{3,}
试试这个:([A-Za-z])\2.*++问题来自于您使用贪婪匹配的事实,最好先将*
放在(\w)\2){3}
的前面,但任何一种方法都应该有效,即使(.[\w)\2){3}.*
如果需要整个字符串的话