正则expression式匹配任何重复超过10次的字符
我正在寻找一个简单的正则expression式来匹配相同的字符重复超过10次左右。 所以举个例子,如果我有一个水平线的文件:
=================================================
它会匹配=
字符的行,因为它重复了10次以上。 请注意 ,我希望这可以用于任何angular色。
你需要的正则expression式是/(.)\1{9,}/
。
testing:
#!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,}
要求九个或更多相同的字符。 因此,这匹配了十个或更多的任何单个字符。
虽然上面的testing脚本是用Perl编写的,但这是非常标准的正则expression式语法,应该可以用任何语言。 在某些变体中,您可能需要使用更多的反斜杠,例如Emacs会让您在这里写入\(.\)\1\{9,\}
。
如果整个string应该由9个或更多相同的字符组成,请在模式周围添加锚点:
my $regex = qr/^(.)\1{9,}$/;
在Python中,您可以使用(.)\1{9,}
- (。)从一个字符(任何字符)
- \ 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
使用{10,}运算符:
$: cat > testre ============================ == ============== $: grep -E '={10,}' testre ============================ ==============
您还可以使用PowerShell快速replace单词或字符提示。 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
在某些应用程序中,您需要删除斜杠才能使其正常工作。
/(.)\1{9,}/
或这个:
(.)\1{9,}
={10,}
匹配=
重复10次或更多次。
它看起来像你需要的正则expression式是:8 = * D
grep -E "8=*D" sampletext