我需要在正则表达式中开发此模式:
模式:
201410021600(12个数字) - 只有两个选项A或B_(ZZ始终为 相同)616048(6个数字)_BBBB(4个字符)-123456ABCDEF(12 alfanumeric)_OUT(总是相同).pdf(总是相同)
真实的例子:
201410021600-A_ZZ123456_BBBB-123456ABCDEF_OUT.pdf。
这是我的尝试,但没有奏效:(:
\d{12}-{1}A_{1}\bZZ\b\d{6}_{1}\d{4}-{1}\w{12}_{1}\bOUT.pdf\b
有人可以帮助我吗?
答案 0 :(得分:1)
您不需要为1指定数量,即仅-{1}
或_{1}
而不是-
或_
就足够了。
此外,您在此处指定了两次数量:\d{6}{1}
这是不必要的。
第三,\b
标记一个单词边界,这意味着需要至少有一些空格。因此\bZZ\b
无法与您的输入相匹配。
应用所有这些,你的正则表达式看起来像这样,应该可以工作:\d{12}-[AB]_ZZ\d{6}_[A-Z]{4}-[A-Z0-9]{12}_OUT\.pdf
要打破它:
201410021600(12 Numbers)
- > \d{12}
-Only two options A or B
- > -[AB]
更新:从您的评论中看来,好像A
和B
是单词,而不仅仅是字符,因此您无法使用字符类这里但需要使用组,例如-(?>A|B)
((?>...)
表示该群组无法捕获,即您无法使用Matcher.group(x)
等检索该群组。)_(ZZ always same)
- > _ZZ
616048(6 numbers)
- > \d{6}
_BBBB(4 characters)
- > _[A-Z]{4}
(我假设只允许使用大写字母)-123456ABCDEF(12 alfanumeric)
- > -[A-Z0-9]{12}
(如果只允许使用大写字符)_OUT(always same)
- > _OUT
.pdf(always same)
- > \.pdf
(点匹配任何字符,因此需要转义)如果情况不是问题,即如果201410021600-a_zz123456_bbbb-123456abcdef_out.pdf.
也应匹配,则将a-z
添加到应允许小写的字符类(例如[a-zA-Z]
而不是{{如果总是允许小写,则在表达式的前面添加[A-Z]
。
答案 1 :(得分:0)
尝试这种模式:
Pattern p =Pattern.compile("\\d{12}-[AB]_ZZ\\d{6}_\\w{4}-\\w{12}_OUT.pdf");
答案 2 :(得分:0)
^\d{12}-[AB]_ZZ\d{6}_[a-zA-Z]{4}-[a-zA-Z0-9]{12}_OUT\.pdf$
试试这个。验证你的所有规则。