Регулярное выражение для повторения любого символа более 10 раз
Я ищу простое регулярное выражение, которое соответствует тому же символу, который повторяется более 10 или около того. Так, например, если у меня есть документ, замусоренный горизонтальными линиями:
=================================================
Он будет соответствовать строке символов =
, потому что он повторяется более 10 раз. Примечание, что я хотел бы, чтобы это работало для любого символа.
Ответы
Ответ 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