【问题标题】:Trouble with regex matching last part正则表达式匹配最后一部分的问题
【发布时间】:2017-01-16 15:16:12
【问题描述】:

我有以下正则表达式:

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$

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

【问题讨论】:

    标签: java regex


    【解决方案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$
    

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

    【讨论】:

      【解决方案2】:

      为什么不使用[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$
      

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2017-11-29
        • 2017-06-23
        • 2011-07-17
        相关资源
        最近更新 更多