Notepad++ Regex:查找名称、单词或标记为大写的所有行

piv4azn7  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(289)

我试图找到一个正则表达式,它将识别文本文件中所有只包含大写字母/大写字母的行。为了澄清,它可以包含其他类型的字符(句点,空格,连字符等),但只有当有4个或更多大写字母和零个小写字母时,该行才应该匹配。
我尝试了各种方法,包括否定字符类和否定/肯定lookaheads(从其他SO帖子复制),但没有一个有效。下面是我提出的一个似乎应该有效的方法,事实上,在RegExr中工作 * 有点
[A-Z]{2,}
[
我意识到2应该是4,但结果基本上是相同的我的目的 *]
以下是RegExr中匹配内容的屏幕截图:

但是,正如你在这里和NotePad++中看到的,它是单独查找每个名字token,但我希望整行都匹配。在下面的截图中,“DONNA”匹配,然后“RIGNEY”匹配,但它需要匹配"DONNA RIGNEY"

flseospp

flseospp1#

^               # Match a full line
(?!.*[a-z])     # if it does not contain any lower case letter and if it contains
.*?             # 0+ characters, followed by
(?:[A-Z].*){4}  # 4 groups, each consists of an uppercase letter and 0+ more characters
$               # right before the end of line.

选项:

  • 火柴盒
  • .匹配换行符[sic]

试试on regex101.com

进一步说明

通过观察,我们可以看到所有包含4个或更多大写字母的行都遵循以下模式:

<anything>[A-Z]<anything>[A-Z]<anything>[A-Z]<anything>[A-Z]<anything>...

由于<anything>也可以包含大写字母,因此可以将其缩小为:

<anything>[A-Z]<anything>[A-Z]<anything>[A-Z]<anything>[A-Z]<anything>

有4个[A-Z]<anything>,所以我们可以将它们折叠为:

<anything>([A-Z]<anything>){4 times}

这可以转换为regex:

.*(?:[A-Z].*){4}
oewdyzsn

oewdyzsn2#

你可以试试这个模式:^([^a-z\n]*[A-Z]){4,}([^a-z\n])*$
第一组([^a-z\n]*[A-Z]){4,}用于匹配大写字母和除小写字母以外的所有其他字母的组,并且应该重复至少4次。
第二组([^a-z\n])*用于匹配除行尾小写字母以外的所有字母。
参见演示here

相关问题