【问题标题】:Using regular expressions to select all uppercase words until the first lowercase character [closed]使用正则表达式选择所有大写单词,直到第一个小写字符[关闭]
【发布时间】:2016-04-05 00:09:10
【问题描述】:

我正在编写在线词典。

目前我的所有条目都包含在一个数据数组中。

示例:“用一种语言输入相同的词在另一种语言中”

我想要做的是选择所有大写字符,直到第一个非大写字母(可能是数字,可能是括号等,但通常是小写字母)。

我目前正在尝试使用正则表达式,但我没有运气!

【问题讨论】:

  • 不会 [A-Z ]* 解决问题吗?捕获所有大写字母和空格
  • @HexedAgain 唯一的问题是当它是一个专有名称时,其他大写字符会出现在小写字母的中间,例如中国等
  • 请向我们展示(理想情况下)所有边缘情况都出现的代表性样本。
  • 试试^[^a-z]*
  • 我猜你应该在字符串^[A-Z ]*的开头添加一个锚点

标签: regex regular-language


【解决方案1】:

如果正则表达式风格是 C#:

^\p{Lu}+(?:\s+\p{Lu}+)*\b

【讨论】:

  • ^ 添加到开头,将\b 添加到末尾,我会投赞成票。 \p{Lu} 也适用于其他几种风格,但主要是正则表达式的结构,匹配一个或多个全大写 单词
  • 末尾的\b 是必要的,因为没有它,假设条目ODIN Wotan 将产生匹配ODIN W。我知道 OP 说比赛后的下一个字符将是小写或不是字母,但挑战在哪里?定义中的首字母大写是唯一让这个问题变得有趣的东西。
【解决方案2】:

匹配所有前导(锚定开始)大写字母和空格:

^[A-Z ]+

这个简单的表达式适用于我能想到的每一种正则表达式。

不匹配目标的尾随空格:

^[A-Z ]*?(?= *[^A-Z])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多