Регулярное выражение для повторения любого символа более 10 раз
Я ищу простое регулярное выражение, которое соответствует тому же символу, который повторяется более 10 или около того. Так, например, если у меня есть документ, замусоренный горизонтальными линиями:
=================================================
Он будет соответствовать строке символов =
потому что он повторяется более 10 раз. Заметьте, что я хотел бы, чтобы это работало для любого персонажа.
- Какие специальные символы должны быть экранированы в регулярных выражениях?
- Как сопоставить несколько вхождений строки в строке с помощью reg ex
- Regex для строки, не заканчивающейся с заданным суффиксом
- Почему class диапазона символов соответствует подчеркиванию?
- Есть ли онлайн-анализатор регулярных выражений, похожий на RegexBuddy?
- Оператор Regex AND
- Regex, каждый символ без буквенно-цифровых символов, кроме пробела или двоеточия
- Режимы нулевой длины и бесконечные совпадения?
- Regex: Согласование путем исключения, без надежды - возможно ли это?
- Regex найти повторяющиеся числа
- Не удается избежать обратного слэша с помощью регулярного выражения?
- Что такое граница слова в регулярных выражениях?
- Regex соответствует всем после вопросительного знака?
/(.)\1{9,}/
выражение, которое вам нужно, это /(.)\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,}
задает девять или более одинаковых символов. Таким образом, это соответствует десяти или более любому символу.
Хотя вышеупомянутый тестовый скрипт находится в Perl, это очень стандартный синтаксис регулярных выражений и должен работать на любом языке. В некоторых вариантах вам может потребоваться больше обратных косых черт, например, Emacs заставит вас написать \(.\)\1\{9,\}
здесь.
Если целая строка должна состоять из 9 или более одинаковых символов, добавьте привязки вокруг шаблона:
my $regex = qr/^(.)\1{9,}$/;
В Python вы можете использовать (.)\1{9,}
- (.) делает группу из одного символа (любого символа)
- \ 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
.
соответствует любому символу. Используется вместе с уже фигурными фигурными скобками:
$: cat > test ======== ============================ oo ooooooooooooooooooooooo $: grep -E '(.)\1{10}' test ============================ ooooooooooooooooooooooo
используйте оператор {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
В некоторых приложениях вам нужно удалить косые черты, чтобы заставить его работать.
/(.)\1{9,}/
или это:
(.)\1{9,}
preg_replace
PHP:
$str = "motttherbb fffaaattther"; $str = preg_replace("/([az])\\1/", "", $str); echo $str;
Здесь [az]
обращается к символу, ()
затем позволяет использовать его с \\1
backreference, который пытается сопоставить другой символ (обратите внимание, что это нацеливание уже на два последовательных символа), таким образом:
мама папа
Если вы это сделали:
$str = preg_replace("/([az])\\1{2}/", "", $str);
который будет стирать 3 последовательных повторяющихся символа, выводящий:
молиться ей
={10,}
matches =
который повторяется 10 или более раз.
Похоже, вам нужно регулярное выражение: 8 = * D
grep -E "8=*D" sampletext