重构正则表达式模式 - Java

时间:2010-05-06 11:50:44

标签: java regex

我有以下aaaa_bb_cc字符串匹配并编写了像

这样的正则表达式模式

\\w{4}+\\_\\w{2}\\_\\w{2}它有效。是否有任何简单的正则表达式可以做到这一点?

4 个答案:

答案 0 :(得分:3)

您无需转义下划线:

\w{4}+_\w{2}_\w{2}

如果你还没有抓住它们,你可以折叠最后两部分:

\w{4}+(?:_\w{2}){2}

但不会变短。

(注意:如果你愿意,可以为Java的字符串重新添加所需的反斜杠;我更喜欢在谈论正则表达式时省略它们)))

答案 1 :(得分:2)

是的,您可以只使用\\w{4}_\\w{2}_\\w{2}\\w{4}(_\\w{2}){2}

答案 2 :(得分:2)

您的\ w看起来不需要匹配下划线,因此您可以使用[a-zA-Z0-9]代替

[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{2}

答案 3 :(得分:2)

我有时按照以下方式做“meta-regexing”:

    String pattern = "x{4}_x{2}_x{2}".replace("x", "[a-z]");
    System.out.println(pattern); // prints "[a-z]{4}_[a-z]{2}_[a-z]{2}"

请注意,这不使用\w,它可以匹配下划线。也就是说,您的原始模式将匹配"__________"

如果x确实需要替换为[a-zA-Z0-9],那么只需在一个地方(而不是3个地方)进行替换。

其他例子