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

基于java中的正则表达式拆分为不同的字符串,java,regex,split,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中,XYZ和PQ_R是我要分别提取的3种图像类型,并将其与从DB中获取的相应类型的相应列表进行比较。 因此,如果我使用下划线“\ux”进行正常拆分,那么在拆分第三个字符串时,它没有达到预期目的 因此,我需

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

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

  • ABC_1234_XL.jpg
  • XYZ_7890_SM.jpg
  • PQ_R_4567_LG.jpg
我现在的正则表达式不起作用的是-

(^[a-zA-Z])(_\\d+_)([a-zA-Z]$)
在上面的
ABC
中,
XYZ
PQ_R
是我要分别提取的3种图像类型,并将其与从DB中获取的相应类型的相应列表进行比较。 因此,如果我使用下划线“\ux”进行正常拆分,那么在拆分第三个字符串时,它没有达到预期目的

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

如果您需要更多信息,请帮助并让我知道。

^([A-Za-z+)\u(\\d+)\u([A-Za-z]+)\\。jpg$
尝试以下操作:

([a-zA-Z][[a-zA-Z]*)(\d+([\w]+[.][\w]+)

第一组查找尽可能多的字符或u 第二组找到123123模式
最后一个可以得到大小和类型。

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

(^[a-zA-Z_]+)(_\\d+_)([a-zA-Z]+)
您甚至可以将分隔符放在中心块之外:

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

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

(^[a-zA-Z])(_\\d+_)([a-zA-Z]$)
只能匹配开头有一个字母的字符串、
\uu
、一个或多个数字、另一个
\u
和以一个字母结尾的字符串。您需要的是regex,它接受

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

  • 您可能还希望用与文件扩展名匹配的序列结束正则表达式,因此需要类似于
    [.]jpg

所以试试看

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

演示: 输出:

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

虽然提供解决方案很好,但最好解释一下它是如何解决问题的。谢谢。正则表达式很好,但需要一个逻辑来将其拆分为3个不同的字符串。Pshemo-感谢EchoThank。如果我将分隔符放在中间块之外,那么-->PQ\u R\u 4567\u LG.jpg将出现问题-当我尝试将字符串拆分为3部分时。此外,ur first regex工作正常。但是我想知道如何基于这个模式进行分割,并将这3个部分分配给3个不同的字符串。让我试试这个,然后返回。谢谢你,先生我很高兴你喜欢它:)是的。这和我想要的完全一样。现在我可以将这些字符串值用于不同的业务逻辑。再次感谢你,朋友:)
ABC : 1234 : XL
XYZ : 7890 : SM
PQ_R : 4567 : LG