正则表达式为非连续的大写单词

时间:2013-12-11 18:28:21

标签: regex notepad++

这是一个适合你的正则表达式向导。

这是在Notepad ++中使用,即直接输入搜索和替换对话框。

我需要匹配并突出显示嵌套在字符串中的两个或多个字符的大写字母的孤立单词,但大写单词不能是连续的,它们必须始终用小写单词(或小写名词包围)包围首字母大写)或者在句子的开头或结尾处跟随或以小写字母开头(或者是第一个字母大写的单词。

即。

给定字符串这是一个带有一些大写字母的句子。

我需要匹配“ WITH 而不是“WORDS”或“IN”,因为WORDS后跟另一个大写单词,IN前面跟着相同。

应该假设该字符串是多行的。

我尝试过前瞻但失败的惨淡

非常感谢任何帮助!

:-)谢谢

5 个答案:

答案 0 :(得分:1)

您应该检查具有负前瞻和负面后瞻的周围字符:

(?<![A-Z]\s)\b[A-Z]+\b(?!\s[A-Z])

Live demo

Notepad ++ v6.5.1&amp;也适用于多线目的

Notepad++ v6.5.1

答案 1 :(得分:1)

我试过那个正则表达式,当我使用&#39; Mark&#39; Notepad ++查找/替换的功能。我不确定你是否还有其他测试用例。

(?:[[:lower:]][^A-Za-z]*|\A)\K\b[[:upper:]]+\b(?=[^A-Za-z]*[[:lower:]]|\Z)

我使用\A\Z,因为您提到了多行。

regex101 demo(在那里有一些解释)。

请务必查看“匹配案例”#。

在: enter image description here

在: enter image description here

编辑:根据更新,为了反转突出显示,我想出了那个...有点冗长:

[^A-Z]+|(?:(?=[A-Z]*[a-z])\b[A-Za-z]+\b)|(?:\b[A-Z]+\b(?=[^a-z]+[A-Z])(?:[^a-z]*[A-Z]+)*)

regex101 demo

enter image description here

答案 2 :(得分:0)

我会尝试

(^|\.\s+|[a-z]\s+)([A-Z]+)(\.|\s+[a-z]|$)

匹配:小写单词的句号或行首或结尾;后跟一个大写字;然后是句号,句号结尾或小写单词的开头。

单词本身在第2组中匹配。如果Notepad ++支持外观断言,则可以执行此操作,以便唯一捕获的单词是单个大写单词:

(?:^|\.\s+|[a-z]\s+)([A-Z]+)(?:\.|\s+[a-z]|$)

答案 3 :(得分:0)

我用

(?<![[:upper:]]) ([[:upper:]]+) (?!([[:upper:]]| )+)

这也将选择您的语言环境认为是大写的任何内容,而不仅仅是A-Z

答案 4 :(得分:0)

您可以使用此模式:

(?:[^A-Z]\s+|[^a-zA-Z\s]|\A)\K[A-Z]+\b(?!\s+[A-Z])