如何查找包含三组双字母的行?作业正则表达式求助
解决匹配含三组双字母行的正则问题
嘿,我太懂你这种卡了好几个小时、绞尽脑汁的感觉了——明明觉得问题不难,可就是找不到突破口,真的闹心😅
先给你捋清楚:你之前用的egrep '(.)\1{3}' fileName,确实只能匹配同一个字符连续重复4次及以上的情况(比如aaaaaa),但这和你要的「包含任意三组双字母(比如aa、dd、ee这类)」完全不是一回事。
正确的正则表达式
要匹配包含至少三组独立双字母的行,你可以用这个egrep命令:
egrep '(.)\1.*(.)\2.*(.)\3' fileName
表达式拆解
(.)\1:匹配任意单个字符的双重复(比如aa、bb、55这类),括号里的.捕获任意字符,\1引用这个捕获到的字符,实现双重复匹配.*:匹配两组双字母之间任意长度的任意字符,保证三组双字母不需要连续出现- 重复三次
(.)\1.*的结构,就可以匹配到包含至少三组双字母的行
补充说明
- 如果你的系统里egrep需要兼容更严格的模式,也可以用grep加扩展正则参数,效果完全一样:
grep -E '(.)\1.*(.)\2.*(.)\3' fileName - 这个表达式允许三组双字母是相同的字符(比如
aaaaaa里能匹配到三组aa),如果你的需求是三组必须是不同的字符,可以随时说,我再给你调整正则~
内容的提问来源于stack exchange,提问作者HanKuSung
相关产品推荐
相关产品推荐

