我正在寻找一个简单的正则表达式,以匹配重复超过10次左右的相同字符.例如,如果我有一个散落着水平线的文档:
=================================================
Run Code Online (Sandbox Code Playgroud)
它将匹配=
字符行,因为它重复超过10次.请注意,我希望这适用于任何角色.
小智 139
你需要的正则表达式是/(.)\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;
Run Code Online (Sandbox Code Playgroud)
这里\1
称为反向引用.它引用.
括号之间的点所捕获的内容 (.)
,然后是{9,}
九个或更多相同字符的请求.因此,这匹配任何单个字符中的十个或更多.
虽然上面的测试脚本是在Perl中,但这是非常标准的正则表达式语法,应该适用于任何语言.在某些变体中,您可能需要使用更多的反斜杠,例如Emacs会让您\(.\)\1\{9,\}
在这里写.
如果整个字符串应包含9个或更多相同的字符,请在模式周围添加锚点:
my $regex = qr/^(.)\1{9,}$/;
Run Code Online (Sandbox Code Playgroud)
Mic*_*las 23
在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
Run Code Online (Sandbox Code Playgroud)
输出:
1. aaaaaaaaaaaaaaa
3. cccccccccccccccccccc
5. eeeeeeeeeeee
Run Code Online (Sandbox Code Playgroud)
小智 6
.
匹配任何字符。与已经提到的花括号结合使用:
$: cat > test
========
============================
oo
ooooooooooooooooooooooo
$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo
Run Code Online (Sandbox Code Playgroud)
在某些应用程序上,您需要删除斜杠才能使其工作。
/(.)\1{9,}/
Run Code Online (Sandbox Code Playgroud)
或这个:
(.)\1{9,}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
108551 次 |
最近记录: |