正则表达式识别3个连续的相同字母/数字

时间:2017-07-06 15:35:14

标签: regex posix

我一直在尝试编写/找到一个正则表达式,用于识别3个以上连续的字母/数字实例。

示例:

CHAIRMAN AAAAAAAND CHIEF EXECUTIVE OFFICER

这将是'**AAAAAAA**'

的匹配b / c

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用反向引用执行此操作:.*([A-Za-z0-9])\1\1.*

此处,每个\1匹配捕获组中匹配的字符。

Regex101进行试验。

答案 1 :(得分:0)

你走在正确的轨道上,这是Python的一个例子:

import re

text = "CHAIRMAN AAAAAAAND CHIEF EXECUTIVE OFFICER"

regex = re.compile("([A-Za-z0-9])\\1\\1")

if re.search(regex, text):
    print ("yuppers")

正则表达式本身正在寻找任何字母或数字,然后是它匹配两次的任何字母或数字。你可以这样做:

[A-Z\d]\\1{2}

并使正则表达式不区分大小写的调用,但是像这样的小正则表达式,我认为只是拼写它对于其他人来说更容易阅读。

答案 2 :(得分:0)

echo 'CHAIRMAN AAAAAAAND CHIEF EXECUTIVE OFFICER' | grep -E -o '([A-Z])\1{2,}'

输出:

AAAAAAA
用于Unix和Linux的

grep工具
-E PATTERN是扩展正则表达式(ERE)
-o仅显示匹配PATTERN的行的部分  ([A-Z])匹配单个字符,并将匹配作为反向引用 \1{2,}使用该反向引用加2个或更多相等 3个连续字符

所以:

echo 'not nn nnn oo ooo tt ttt 123 11 111' | grep -E -o '(\w)\1{2,}'  

将匹配:

nnn
ooo
ttt
111  

或者:

echo 'not nnn ooo ttt 123 111' | grep -E -o '([[:alpha:]]|[[:digit:]])\1{2,}'  

具有相同的输出。

但是,您可能知道\w也可能与_匹配,因此使用像[a-z]这样的字符类或像[[:alpha:]]这样的内置字符类是更好的选择。