java - 基于java中的正则表达式拆分成不同的字符串

标签 java regex split

我需要根据以下格式的正则表达式拆分字符串。

有 3 种不同类型的字符串值 -

  • ABC_1234_XL.jpg
  • XYZ_7890_SM.jpg
  • PQ_R_4567_LG.jpg

我现在无法使用的正则表达式是 -

(^[a-zA-Z])(_\\d+_)([a-zA-Z]$)

在上面的ABC中,XYZPQ_R是我想分别提取的3种图像类型,并与各自的列表进行比较从数据库中获取的相应类型。 因此,如果我使用下划线“_”进行正常拆分,那么它在拆分第 3 个字符串时就达不到目的了。

所以我需要一个基于正则表达式拆分这些字符串的解决方案,其中每次中心元素都是 [0-9],左边是图像类型,右边是图像大小。
含义 - ImageType_ImageTypeID_ImageSize。我们需要以中心元素 (imageTypeID) 为基础拆分它,并通过排除“_”来获取左右日期。 如何使用 Split 和 Regex 实现这一点?

请帮忙,如果您需要更多信息,请告诉我。

最佳答案

好的,既然还没有人解释你的问题,那我试试。您当前的正则表达式

(^[a-zA-Z])(_\\d+_)([a-zA-Z]$)

只能匹配以一个字母开头、_、一个或多个数字、另一个_并以一个字母结尾的字符串。你需要的是接受字符串的正则表达式

  • [a-zA-Z]+(?:_[a-zA-Z]+)* - 以一个或多个字母开头,可以有可选的_ 和字母的序列(还不是数字)
  • _\\d+_ - 数字后面有 _
  • [a-zA-Z]+ 后面有一个或多个字母。

  • 您可能还想以匹配文件扩展名的序列结束正则表达式,因此您需要像 [.]jpg

所以试试

([a-z]+(?:_[a-z]+)*)_(\\d+)_([a-z]+)[.]jpg

演示:

String[] data = {
        "ABC_1234_XL.jpg",
        "XYZ_7890_SM.jpg",
        "PQ_R_4567_LG.jpg",
};
Pattern p = Pattern.compile(
            "([a-z]+(?:_[a-z]+)*)_(\\d+)_([a-z]+)[.]jpg",
   //group 1  ^^^^^^^^^^^^^^^^^^
   //group 2                       ^^^^
   //group 3                              ^^^^^^
            Pattern.CASE_INSENSITIVE);
for (String s : data) {
    Matcher m = p.matcher(s);
    if (m.matches())
        System.out.println(m.group(1)+" : "+m.group(2)+" : "+m.group(3));
    else
        System.out.println(s+" doesn't match pattern");
}

输出:

ABC : 1234 : XL
XYZ : 7890 : SM
PQ_R : 4567 : LG

关于java - 基于java中的正则表达式拆分成不同的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090264/

相关文章:

java - Go 中的 Java Arrays.copyOfRange 等价于什么?

Java通用二进制搜索树类型问题

java - 如何阻止 GMail 将电子邮件中的嵌入图像显示为附件?

regex - R : grep() lookup world. 城市数据集中的地理编码地址

c++ - 如何在字符串的反面使用正则表达式?

sql - 字符串拆分sql函数仅返回字符串中的第一个单词

string - strsplit 带竖线(管道)

java - 使用 Spring 3 生成在 Postgres 中使用游标的 sql

javascript - 正则表达式删除除回车符以外的空格

Java 将带有换行符的字符串拆分为数组,其中使用缓冲读取器从文件中读取字符串