我需要提出一个正则表达式来解析我的输入字符串。我的输入字符串格式为:
[alphanumeric].[alpha][numeric].[alpha][alpha][alpha].[julian date: yyyyddd]
例如:
A.A2.ABC.2014071
3.M1.MMB.2014071
我需要从第3个位置对其进行子串,并且想知道最简单的方法是什么。
期望的结果:
A2.ABC.2014071
M1.MMB.2014071
答案 0 :(得分:1)
使用此正则表达式:
\w.[A-Z]\d.[A-Z]{3}.\d{7}
使用上面的正则表达式:
String[] in = {
"A.A2.ABC.2014071", "3.M1.MMB.2014071"
};
Pattern p = Pattern.compile("\\w.[A-Z]\\d.[A-Z]{3}.\\d{7}");
for (String s: in ) {
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("Result: " + m.group().substring(2));
}
}
答案 1 :(得分:1)
(?i)
将被视为不区分大小写。
(?i)^[a-z\d]\.[a-z]\d\.[a-z]{3}\.\d{7}$
此处a-z
表示从a到z的任何字母,而\d
表示从0到9的任何数字。
现在,如果您要删除dot之前的第一部分,请使用此正则表达式并将其替换为$1
(或可能是\1
)
(?i)^[a-z\d]\.([a-z]\d\.[a-z]{3}\.\d{7})$
另一个选项是将以下替换为空:
(?i)^[a-z\d]\.
答案 2 :(得分:1)
如果输入字符串只是长格式,那么除了前两个字符外,您还需要所有内容。你可以安排用什么来代替它们:
s/^..//
或者您可以安排捕捉除前两个字符之外的所有内容:
/^..(.*)/
如果表达式是较大字符串的一部分,则字母数字组件的细分变得更加重要。
详细信息取决于托管正则表达式的语言。上面写的符号可能是Perl或PCRE(Perl兼容的正则表达式)。许多其他语言也会接受这些正则表达式,但其他语言需要调整。