[regex] 10 회 이상 반복되는 모든 문자와 일치하는 정규 표현식
10 회 이상 반복되는 동일한 문자와 일치하는 간단한 정규식을 찾고 있습니다. 예를 들어 가로줄이 흩어져있는 문서가있는 경우 :
=================================================
=
10 회 이상 반복되므로 문자 줄과 일치합니다 . 참고 내가위한 작업이 좋아하는 거라고 어떤 문자.
답변
필요한 정규식은 /(.)\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,}
구 이상의 같은 문자의 요청합니다. 따라서 이것은 10 개 이상의 단일 문자와 일치합니다.
위의 테스트 스크립트는 Perl에 있지만 이것은 매우 표준적인 정규식 구문이며 모든 언어에서 작동합니다. 일부 변형에서는 더 많은 백 슬래시를 사용해야 할 수 있습니다 \(.\)\1\{9,\}
. 예를 들어 Emacs는 여기에 작성 합니다.
전체 문자열이 9 개 이상의 동일한 문자로 구성되어야하는 경우 패턴 주위에 앵커를 추가합니다.
my $regex = qr/^(.)\1{9,}$/;
답변
Python에서는 다음을 사용할 수 있습니다. (.)\1{9,}
- (.) 한 문자 (모든 문자)에서 그룹을 만듭니다.
- \ 1 {9,}는 첫 번째 그룹의 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
답변
일부 앱에서는 작동하도록 슬래시를 제거해야합니다.
/(.)\1{9,}/
아니면 이거:
(.)\1{9,}
답변
{10,} 연산자를 사용하십시오.
$: cat > testre
============================
==
==============
$: grep -E '={10,}' testre
============================
==============
답변
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
답변
PHP의 preg_replace
예 :
$str = "motttherbb fffaaattther";
$str = preg_replace("/([a-z])\\1/", "", $str);
echo $str;
여기 [a-z]
에서 문자 ()
를 \\1
친 다음 다른 동일한 문자와 일치시키려는 역 참조 와 함께 사용할 수 있습니다 (이미 연속 된 2 개의 문자를 대상으로 함).
어머니 아버지
그랬다면 :
$str = preg_replace("/([a-z])\\1{2}/", "", $str);
3 개의 연속 된 반복 문자를 지우고 다음을 출력합니다.
그녀를 모 허브