正则表达式匹配最后一部分的麻烦

时间:2017-01-16 15:16:12

标签: java regex

我有以下正则表达式:

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_firsttest)?\.fits$

匹配:

solo_LL01_eui-fsi-174_0715246200_V201607271145C_firsttest.fits

我想把第一个文本作为任何数字/字符。我尝试了一些变体,例如:

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_])?\.fits$

但似乎只是让它发挥作用。 非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

查看Pattern的文档,特别是关于"预定义字符类"的部分。 :

  

\ w单词字符:[a-zA-Z_0-9]

和"量词":

  

X *:X,零次或多次

     

X +:X,一次或多次

以下内容应匹配任意数量的字符/数字: -

[\w]*

对于一个或多个字符或数字: -

[\w]+

事实上你所尝试的也是正确的,除了你错过了量词*(任意数量的匹配)或+(1或更多匹配)...所以你的正则表达式只需要: -

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_]*)?\.fits$

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_]+)?\.fits$

取决于您希望使用的量词(*或+)

答案 1 :(得分:0)

为什么不使用[A-Za-z0-9]+

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?_([A-Za-z0-9]+)?\.fits$