首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式用于捕获组

正则表达式用于捕获组
EN

Stack Overflow用户
提问于 2010-12-08 20:42:13
回答 4查看 232关注 0票数 2

我的小组可以是x/y、x.y或x_y.z的形式。每组用下划线分隔。这些组是无序的。

示例:

代码语言:javascript
运行
复制
ABC/DEF_abc.def_PQR/STU_ghi_jkl.mno

我想要捕获以下内容:

代码语言:javascript
运行
复制
ABC/DEF
abc.def
PQR/STU
ghi_jkl.mno

我使用了一个相当冗长的字符串迭代和解析方法(如下所示)来完成此任务,但我想知道一个简单的正则表达式是否可以完成此任务。

代码语言:javascript
运行
复制
private static ArrayList<String> go(String s){
    ArrayList<String> list = new ArrayList<String>();
    boolean inSlash = false;
    int pos = 0 ;
    boolean inDot = false;
    for(int i = 0 ; i < s.length(); i++){
        char c = s.charAt(i);
        switch (c) {
        case '/':
            inSlash = true;
            break;
        case '_':
            if(inSlash){
                list.add(s.substring(pos,i));
                inSlash = false;
                pos = i+1 ;
            }
            else if (inDot){
                list.add(s.substring(pos,i));
                inDot = false;
                pos = i+1;
            }
            break;
        case '.':
            inDot = true;
            break;
        default:
            break;
        }

    }
    list.add(s.substring(pos));
    System.out.println(list);
    return list;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-08 21:04:48

尝试一下:

代码语言:javascript
运行
复制
((?:[^_./]+/[^_./]+)|(?:[^_./]+\.[^_./]+)|(?:[^_./]+(?:_[^_./]+)+\.[^_./]+))

我不知道java的语法,但是在Perl中:

代码语言:javascript
运行
复制
#!/usr/bin/perl
use 5.10.1;
use strict;
use warnings;

my $str = q!ABC/DEF_abc.def_PQR/STU_ghi_jkl.mno_a_b_c.z_a_b_c_d.z_a_b_c_d_e.z!;
my $re = qr!((?:[^_./]+/[^_./]+)|(?:[^_./]+\.[^_./]+)|(?:[^_./]+(?:_[^_./]+)+\.[^_./]+))!;
while($str=~/$re/g) {
    say $1;
}

将产生:

代码语言:javascript
运行
复制
ABC/DEF
abc.def
PQR/STU
ghi_jkl.mno
a_b_c.z
a_b_c_d.z
a_b_c_d_e.z
票数 2
EN

Stack Overflow用户

发布于 2010-12-08 20:49:17

下划线可能有问题,因为它并不总是分隔符。

也许:((?<=_)\w+_)?\w+[./]\.w+

票数 0
EN

Stack Overflow用户

发布于 2010-12-08 20:58:34

这个正则表达式可能会(用.Net正则表达式测试):

代码语言:javascript
运行
复制
[a-zA-Z]+[./][a-zA-Z]+|[a-zA-Z]+_[a-zA-Z]+\.[a-zA-Z]+

(如果您知道您的输入格式良好,则不需要显式匹配分隔符)

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

https://stackoverflow.com/questions/4387531

复制
相关文章

相似问题

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