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

时间:2014-06-06 20:40:41

标签: 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种类型的图像类型,并将其与从DB中提取的相应类型的相应列表进行比较。 因此,如果我使用下划线“_”进行正常分割,那么在分割第3个字符串时它会淹没目的。

所以我需要一个基于正则表达式拆分这些字符串的解决方案,每次中心元素为[0-9],左边是图像类型,右边是图像尺寸。 含义 - ImageType_ImageTypeID_ImageSize。我们需要将中心元素(imageTypeID)作为基础进行拆分,然后得到左边的&正确的日期,不包括“_”。 如何使用Split和Regex实现这一目标?

请帮助,如果您需要更多信息,请告知我们。

4 个答案:

答案 0 :(得分:2)

好的,因为还没有人解释你的问题然后我会尝试。你当前的正则表达式

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

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

的正则表达式
  • [a-zA-Z]+(?:_[a-zA-Z]+)* - 以一个或多个字母开头,可以包含_和字母(不是数字)的可选序列
  • _\\d+_ - 在{/ 1>}之后用_包围数字
  • [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

答案 1 :(得分:0)

试试这个:

([A-ZA-Z] [_] [A-ZA-Z] *)( \ d + )([\ W] + [。] [\ W] +)

第一组查找尽可能多的字符或_ 第二组找到 123123 模式 最后一个可以获得尺寸和类型。

答案 2 :(得分:0)

如果允许第一部分包含_,我认为将其包含在该块的字符列表中就足够了:

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

您甚至可以将分隔符放在中心区域之外:

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

答案 3 :(得分:-1)

^([A-Za-z_]+)_(\\d+)_([A-Za-z]+)\\.jpg$