我有以下正则表达式:
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$
但似乎只是让它发挥作用。 非常感谢您的帮助
答案 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$