使用正则表达式解析字符串

时间:2014-03-12 14:48:02

标签: regex substring

我需要提出一个正则表达式来解析我的输入字符串。我的输入字符串格式为:

[alphanumeric].[alpha][numeric].[alpha][alpha][alpha].[julian date: yyyyddd]

例如:

    A.A2.ABC.2014071   
    3.M1.MMB.2014071

我需要从第3个位置对其进行子串,并且想知道最简单的方法是什么。

期望的结果:

A2.ABC.2014071
M1.MMB.2014071

3 个答案:

答案 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));
    }
}

现场演示:http://ideone.com/tns9iY

答案 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兼容的正则表达式)。许多其他语言也会接受这些正则表达式,但其他语言需要调整。