我试图找到一个正则表达式,它将识别文本文件中所有只包含大写字母/大写字母的行。为了澄清,它可以包含其他类型的字符(句点,空格,连字符等),但只有当有4个或更多大写字母和零个小写字母时,该行才应该匹配。
我尝试了各种方法,包括否定字符类和否定/肯定lookaheads(从其他SO帖子复制),但没有一个有效。下面是我提出的一个似乎应该有效的方法,事实上,在RegExr中工作 * 有点 :[A-Z]{2,}
[ 我意识到2应该是4,但结果基本上是相同的我的目的 *]
以下是RegExr中匹配内容的屏幕截图:
但是,正如你在这里和NotePad++中看到的,它是单独查找每个名字token
,但我希望整行都匹配。在下面的截图中,“DONNA”匹配,然后“RIGNEY”匹配,但它需要匹配"DONNA RIGNEY"
。
2条答案
按热度按时间flseospp1#
选项:
.
匹配换行符[sic]试试on regex101.com。
进一步说明
通过观察,我们可以看到所有包含4个或更多大写字母的行都遵循以下模式:
由于
<anything>
也可以包含大写字母,因此可以将其缩小为:有4个
[A-Z]<anything>
,所以我们可以将它们折叠为:这可以转换为regex:
oewdyzsn2#
你可以试试这个模式:
^([^a-z\n]*[A-Z]){4,}([^a-z\n])*$
第一组
([^a-z\n]*[A-Z]){4,}
用于匹配大写字母和除小写字母以外的所有其他字母的组,并且应该重复至少4次。第二组
([^a-z\n])*
用于匹配除行尾小写字母以外的所有字母。参见演示here