Подтвердить что ты не робот

Регулярное выражение для повторения любого символа более 10 раз

Я ищу простое регулярное выражение, которое соответствует тому же символу, который повторяется более 10 или около того. Так, например, если у меня есть документ, замусоренный горизонтальными линиями:

=================================================

Он будет соответствовать строке символов =, потому что он повторяется более 10 раз. Примечание, что я хотел бы, чтобы это работало для любого символа.

4b9b3361

Ответ 1

Необходимое регулярное выражение /(.)\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,} запрашивает девять или более одинаковых символов. Таким образом, это соответствует десяти или более любому одиночному символу.

Хотя приведенный выше тест script находится в Perl, это очень стандартный синтаксис regex и должен работать на любом языке. В некоторых вариантах вам может потребоваться использовать больше обратных косых черт, например. Emacs заставит вас написать \(.\)\1\{9,\} здесь.

Если целая строка должна состоять из 9 или более одинаковых символов, добавьте привязки вокруг шаблона:

my $regex = qr/^(.)\1{9,}$/;

Ответ 2

В Python вы можете использовать (.)\1{9,}

  • (.) делает группу из одного char (любого char)
  • \1 {9,} соответствует девяти или более символам из 1-й группы

Пример:

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

Ответ 3

. соответствует любому символу. Используется совместно с фигурными фигурными скобками, которые уже упомянуты:

$: cat > test
========
============================
oo
ooooooooooooooooooooooo


$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo

Ответ 4

используйте оператор {10,}:

$: cat > testre
============================
==
==============

$: grep -E '={10,}' testre
============================
==============

Ответ 5

Вы также можете использовать 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

Ответ 6

В некоторых приложениях вам нужно удалить косые черты, чтобы заставить его работать.

/(.)\1{9,}/

или это:

(.)\1{9,}

Ответ 7

={10,}

соответствует =, который повторяется 10 или более раз.

Ответ 8

Похоже, вам нужно регулярное выражение: 8 = * D

grep -E "8=*D" sampletext