我正在寻找一个简单的正则表达式来匹配相同的字符被重复超过10次左右。例如,如果我有一个文档,上面布满了水平线:
=================================================
它将匹配=
字符所在的行,因为它重复了10次以上。注意到,我希望这对任何角色都有效。
发布于 2009-11-02 19:32:26
您需要的正则表达式是/(.)\1{9,}/
。
测试:
#!perl
use warnings;
use strict;
my $regex = qr/(.)\1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;
这里的\1
被称为反向引用。它引用括号(.)
之间的点.
捕获的内容,然后{9,}
请求9个或更多相同字符。因此,这将匹配10个或更多的任何单个字符。
尽管上面的测试脚本是用Perl编写的,但这是非常标准的regex语法,应该适用于任何语言。在一些变体中,你可能需要使用更多的反斜杠,例如Emacs会让你在这里写\(.\)\1\{9,\}
。
如果整个字符串应由9个或9个以上相同的字符组成,请在模式周围添加锚点:
my $regex = qr/^(.)\1{9,}$/;
发布于 2009-11-02 19:35:54
在Python中,您可以使用(.)\1{9,}
示例:
txt = """1. aaaaaaaaaaaaaaa
2. bb
3. cccccccccccccccccccc
4. dd
5. eeeeeeeeeeee"""
rx = re.compile(r'(.)\1{9,}')
lines = txt.split('\n')
for line in lines:
rxx = rx.search(line)
if rxx:
print line
输出:
1. aaaaaaaaaaaaaaa
3. cccccccccccccccccccc
5. eeeeeeeeeeee
发布于 2009-11-02 19:35:02
.
可以匹配任何字符。与前面提到的花括号连用:
$: cat > test
========
============================
oo
ooooooooooooooooooooooo
$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo
https://stackoverflow.com/questions/1660694
复制相似问题