首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将2 REGEX简化为1

将2 REGEX简化为1
EN

Stack Overflow用户
提问于 2018-10-20 10:21:28
回答 3查看 74关注 0票数 1

我必须检测到一个字符串,该字符串包含至少一个大写字母,与第一个字母不同,并且不包含小写字母。例如:

  • ABCD ! =>可接受案例
  • Tommy Tom =>不可接受的情况
  • Let something =>不可接受的情况

这里是我使用2 Regex所做的工作:

代码语言:javascript
运行
复制
!Regex.IsMatch(input, @"[a-z]") &&  Regex.IsMatch(input, @"[A-Z]");

我正在寻找一个使用单一REGEX的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-20 10:23:24

你可以用

代码语言:javascript
运行
复制
^(?![^a-z]*[a-z])[^A-Z]*[A-Z]

regex演示

详细信息

  • ^ -字符串的开始
  • (?![^a-z]*[a-z]) -如果在除小写ASCII字母之外的任何0+字符后面都有小写的ASCII字母,则会导致匹配失败。
  • [^A-Z]* - 0+字符(大写字母除外)
  • [A-Z] -大写的ASCII字母。
票数 1
EN

Stack Overflow用户

发布于 2018-10-20 10:27:30

一种选择是

代码语言:javascript
运行
复制
^[^a-zA-Z]*[A-Z][^a-z]*$

重复零个或多个非字母字符,匹配大写字符,然后再重复零个或多个非小写字符,直到到达字符串的末尾。

https://regex101.com/r/6JZCDr/2

第一个字符集中的A-Z并不是必需的,但是它将导致更少的步骤,因为第二个字符集的[A-Z]将匹配而不进行任何回溯(如果可能的话)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-20 22:22:32

考虑支持多语言输入(演示)的正则表达式:

代码语言:javascript
运行
复制
^(?=\P{Ll}*$)\P{Lu}*(\p{Lu}).*?\p{Lu}(?<!\1)

解释:

代码语言:javascript
运行
复制
^(?=\P{Ll}*$)  # Lowercase letters are not allowed
\P{Lu}*        # Allow offset for the 1st uppercase letter
(\p{Lu})       # Capture the 1st uppercase letter
.*?            # Allow offset for the 2nd uppercase letter
\p{Lu}         # Require the 2nd uppercase letter
(?<!\1)        # ..different from the 1st uppercase letter

其中:

  • \P{Ll}的意思是“不是小写字母”
  • \P{Lu}的意思是“不是大写字母”
  • \p{Lu}的意思是“大写字母”

(注意\P\p寄存器)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52904607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档