使用正则表达式匹配大写字母和小写字母进行搜索

5

我正在使用Notepad++,发现当我使用正则表达式搜索只想要小写字母("[a-z]")的字符串时,有时会返回大写字母。

我最初是使用以下字符串进行搜索:

^[A-Z][a-z].+?$

为了删除文件中以大写字母开头,后跟小写字母,然后是任何字符直到行末的任何行。然而,这会返回像“CLONE”和“DISEASE”这样只包含大写字母的行。出于好奇,我尝试了:

^[a-z].+?$

但它仍然以全大写字母返回那些行。最后,我尝试了:

^[\u0061-\u007A].+?$

它仍然返回了全大写文字的行。是否有些括号外的东西导致这种情况发生?


12
“Match Case” 复选框被勾选了吗? - Trudbert
首先 - 哇。不,不是的。谢谢,哈哈!但是第二,当我使用Unicode搜索“a”到“z”时,即使勾选了“区分大小写”,它仍然返回所有大写字符串。但如果我直接输入“[A-Z][a-z]”,它就能做到我想要的。谢谢! - Phil Dinius
1
[A-Z][a-z] 表示大写字母后面跟着小写字母... [A-Za-z] 可以是大写或者小写字母。 - Captain
1个回答

8
作为许多其他文本编辑器,Notepad++提供了一个全局选项来“匹配大小写”。即使您的表达式不包含内部修饰符“(?i)”,根据“匹配大小写”设置为ON或OFF,结果可能会出乎意料。
因此,当“匹配大小写”为OFF时,您的ALLCAPS行是 ^ [A-Z] [a-z]. +?$ 的有效匹配,因为字母以不区分大小写的方式匹配。
勾选“匹配大小写”以启用正则表达式搜索的区分大小写:检查匹配大小写

enter image description here

覆盖大小写敏感性的其他方法

有一些正则表达式支持内联标志,可以为整个或部分模式硬编码大小写敏感性:

  • (?-i)[A-Z][a-z]* 只匹配一个大写字母和后面的小写字母,因为 (?-i) 开启了大小写敏感性
  • (?i)[A-Z][a-z]* 匹配 1 个或多个大写或小写字母
  • (?-i)[a-z](?i)[a-f](?-i)[a-z] 匹配一个小写字母,然后是从 afAF 的小写或大写字母,最后再匹配一个小写字母
  • S(?i:[a-z])S - Ss 将与 S 匹配(取决于环境设置,如 Match case),然后是任何大写或小写字母,最后是 S/s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接