【问题标题】:Regex matching uppercase characters with lowercase search正则表达式匹配大写字符和小写搜索
【发布时间】:2014-10-12 13:24:38
【问题描述】:

我正在使用 notepad++,我发现当我使用正则表达式搜索我特别想查找小写字母(“[a-z]”)的字符串时,它有时会返回大写字母。

我最初是使用字符串搜索的:

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

目的是删除文件中以大写字符开头、后跟小写字母、后跟直到行尾的任何内容的任何行。但是,这会返回诸如“CLONE”和“DISEASE”之类的行,它们只是大写字母。出于好奇,我尝试了:

^[a-z].+?$

它仍然以全大写形式返回这些行。最后,我尝试了:

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

仍然返回全大写文本行。是不是我的括号之外的东西导致了这种情况发生?

【问题讨论】:

  • 是否选中了“匹配大小写”复选框?
  • 首先 - 哇。不,不是。谢谢,哈哈!但其次,当我使用 unicode 搜索“a”到“z”时,即使选中“Match Case”,它仍会返回所有大写字符串。但是,如果我按字面意思输入“[A-Z][a-z]”,它就会满足我的要求。谢谢!
  • [A-Z][a-z] 是大写后跟小写... [A-Za-z] 是大写还是小写

标签: regex notepad++ uppercase lowercase


【解决方案1】:

与许多其他文本编辑器一样,Notepad++ 为Match case 提供了一个全局选项。即使您的表达式不包含内部修饰符 (?i),根据 Match case 是设置为 ON 还是 OFF,结果也可能出乎意料。

因此,您的 ALLCAPS 行与 ^[A-Z][a-z].+?$ 有效匹配,因为当 Match caseOFF 时,字母以不区分大小写的方式匹配。

选中Match case 为正则表达式搜索启用区分大小写

覆盖区分大小写的其他方法

您可以使用一些内联标志与一些正则表达式风格来硬编码全部或部分模式的大小写敏感性:

  • (?-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多