[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 개의 연속 된 반복 문자를 지우고 다음을 출력합니다.

그녀를 모 허브