我正在寻找一个简单的正则表达式来匹配重复10次以上的同一个字符。例如,如果我有一个布满水平线的文档:
=================================================
它将匹配=字符行,因为它重复了10次以上。注意我希望这对 * 任何 * 字符都有效。
=
kadbb4591#
您需要的正则表达式是/(.)\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,}请求9个或更多相同的字符。因此,这匹配了10个或更多的任何单个字符。虽然上面的测试脚本是用Perl编写的,但这是非常标准的正则表达式语法,应该适用于任何语言。在某些变体中,你可能需要使用更多的反斜杠,例如Emacs会让你在这里写\(.\)\1\{9,\}。如果一个字符串应该包含10个或更多相同的字符,请在模式周围添加锚点:
\1
(.)
.
{9,}
\(.\)\1\{9,\}
my $regex = qr/^(.)\1{9,}$/;
e5nqia272#
在Python中,可以使用(.)\1{9,}
(.)\1{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
vof42yt13#
.匹配任何字符。与前面提到的花括号一起使用:
$: cat > test ======== ============================ oo ooooooooooooooooooooooo $: grep -E '(.)\1{10}' test ============================ ooooooooooooooooooooooo
rslzwgfq4#
={10,}
匹配重复10次或更多次的=。
nnsrf1az5#
使用{10,}运算符:
$: cat > testre ============================ == ============== $: grep -E '={10,}' testre ============================ ==============
jecbmhm36#
您也可以使用PowerShell to quickly replace words或字符reptitions。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
v1l68za47#
PHP的preg_replace示例:
preg_replace
$str = "motttherbb fffaaattther"; $str = preg_replace("/([a-z])\\1/", "", $str); echo $str;
这里[a-z]命中字符,然后()允许它与\\1反向引用一起使用,该反向引用试图匹配另一个相同的字符(注意,这已经针对2个连续字符),因此:母亲父亲如果您有:
[a-z]
()
\\1
$str = preg_replace("/([a-z])\\1{2}/", "", $str);
即擦除3个连续重复的字符,输出:莫赫布海尔
64jmpszr8#
一个更通用的powershell例子。在powershell7中,匹配项被高亮显示,包括最后一个空格(你能在堆栈中高亮显示吗?)
'a b c d e f ' | select-string '([a-f] ){6,}' a b c d e f
8条答案
按热度按时间kadbb4591#
您需要的正则表达式是
/(.)\1{9,}/
。试验:
这里
\1
被称为反向引用。它引用括号(.)
之间的点.
捕获的内容,然后{9,}
请求9个或更多相同的字符。因此,这匹配了10个或更多的任何单个字符。虽然上面的测试脚本是用Perl编写的,但这是非常标准的正则表达式语法,应该适用于任何语言。在某些变体中,你可能需要使用更多的反斜杠,例如Emacs会让你在这里写
\(.\)\1\{9,\}
。如果一个字符串应该包含10个或更多相同的字符,请在模式周围添加锚点:
e5nqia272#
在Python中,可以使用
(.)\1{9,}
示例:
输出:
vof42yt13#
.
匹配任何字符。与前面提到的花括号一起使用:rslzwgfq4#
匹配重复10次或更多次的
=
。nnsrf1az5#
使用{10,}运算符:
jecbmhm36#
您也可以使用PowerShell to quickly replace words或字符reptitions。PowerShell适用于Windows。当前版本为3.0。
v1l68za47#
PHP的
preg_replace
示例:这里
[a-z]
命中字符,然后()
允许它与\\1
反向引用一起使用,该反向引用试图匹配另一个相同的字符(注意,这已经针对2个连续字符),因此:母亲父亲
如果您有:
即擦除3个连续重复的字符,输出:
莫赫布海尔
64jmpszr8#
一个更通用的powershell例子。在powershell7中,匹配项被高亮显示,包括最后一个空格(你能在堆栈中高亮显示吗?)