Answers:
您需要的正则表达式是/(.)\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个或更多相同字符。因此,这匹配任何单个字符的十个或更多。
尽管上面的测试脚本使用Perl,但是这是非常标准的regex语法,并且可以使用任何语言。在某些变体中,您可能需要使用更多的反斜杠,例如Emacs将使您\(.\)\1\{9,\}
在此处编写。
如果整个字符串应包含9个或更多相同的字符,请在模式周围添加锚点:
my $regex = qr/^(.)\1{9,}$/;
在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
.
匹配任何字符。与已经提到的花括号一起使用:
$: cat > test
========
============================
oo
ooooooooooooooooooooooo
$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo
grep -E '([=o])\1{10}' test
与grep -E '([=o]){10}' test
正常工作与你的例子(注意缺乏\1
在第二个命令)。但是命令grep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
与行不匹配!但是没有命令\1
匹配的行:grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
。请您能解释一下吗?干杯;)
在某些应用上,您需要删除斜杠以使其正常运行。
/(.)\1{9,}/
或这个:
(.)\1{9,}
您还可以使用PowerShell快速替换单词或字符格式。PowerShell适用于Windows。当前版本是3.0。
$oldfile = "$env:windir\WindowsUpdate.log"
$newfile = "$env:temp\newfile.txt"
$text = (Get-Content -Path $oldfile -ReadCount 0) -join "`n"
$text -replace '/(.)\1{9,}/', ' ' | Set-Content -Path $newfile
={10,}
匹配=
重复10次或更多次。