首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >4种简单条件下的RegEx制作方法

4种简单条件下的RegEx制作方法
EN

Stack Overflow用户
提问于 2020-03-02 21:15:22
回答 3查看 51关注 0票数 0

我试图为4个简单的条件做一个正则表达式:

  1. AdobeSoftware应该是"Adobe“和"Software”-->获取两个字符串"Adobe“和"Software”
  2. adobeSoftware应该是"adobe“和"Software”-->获取两个字符串"adobe“和"Software”
  3. ADobeSoftware应该是"ADobe“和"Software”-->获取两个字符串"ADobe“和"Software”
  4. adobe1Software应该是"adobe“、"1”和"Software“-->获取3个字符串"adobe”、"1“和"Software”

我无法完成最后一项任务。我所做的:

代码语言:javascript
运行
复制
("
 + "?<=[a-z])(?=[A-Z])|("
 + "?<=[A-Z])(?=[A-Z][a-z])|("
 + "?<=[0-9])(?=[A-Z][a-z])|("
 + "?<=[a-zA-Z])(?=[0-9])|(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"))

如何通过正则表达式实现上述目标?

EN

回答 3

Stack Overflow用户

发布于 2020-03-02 21:25:07

您可以使用捕获组来获取这些匹配,而不是使用查找器,并使数字组成为可选的:

代码语言:javascript
运行
复制
\b([A-Z]*[a-z]+)(\d+)?([A-Z][a-z]+)\b
  • \b单词边界以防止单词成为较大单词的一部分
  • ( Capture group 1
    • [A-Z]*[a-z]+匹配0+ chars and匹配AAD,1+ chars A-Z匹配obedobeadobe

  • )紧群
  • (\d+)?可选捕获组2以匹配1
  • ( Capture group 3
    • [A-Z][a-z]+匹配一个char and和1+ chars and来匹配Software

  • )紧群
  • \b \b字界

Regex演示 x- Java演示

或匹配第二个组(\d*)中的(\d*)位数。

然后,您可以检查是否存在组2,或者在后一种情况下检查组2的值。

示例代码

代码语言:javascript
运行
复制
String regex = "\\b([A-Z]*[a-z]+)(\\d+)?([A-Z][a-z]+)\\b";
String string = "AdobeSoftware\n"
     + "adobeSoftware\n"
     + "ADobeSoftware\n"
     + "adobe1Software";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    for (int i = 1; i <= matcher.groupCount(); i++) {
        if (matcher.group(i) != null) {
            System.out.println(matcher.group(i));
        }
    }
    System.out.println("\n");
}

输出

代码语言:javascript
运行
复制
Adobe
Software

adobe
Software

ADobe
Software

adobe
1
Software
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 21:26:26

正则表达式([aA][dD][oO][bB][eE])([0-9]?)([a-zA-Z]+)满足您所描述的所有4个条件。

([aA][dD][oO][bB][eE])将用大小写字母的任意组合来匹配"Adobe“一词。([0-9]?)将在两个单词之间匹配一个选项数字。([a-zA-Z]+)将匹配任何字母序列。

票数 0
EN

Stack Overflow用户

发布于 2020-03-02 21:45:52

您可以使用以下表达式:

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

一般来说,表达式将试图找到三个组: 1)以小写开头的字符串,1或更多的大写,2)可选的任意大小的字符串数目3)一个或多个以小写、1或更多大写开头的字符串

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

https://stackoverflow.com/questions/60496777

复制
相关文章

相似问题

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