重构正则表达式模式-Java
我有以下重构正则表达式模式-Java,java,regex,Java,Regex,我有以下aaaa\u bb\u cc字符串要匹配,并编写了一个正则表达式模式,如 \\w{4}+\\\\\\\\w{2}\\\\\\\\\\\w{2}它可以工作。有没有简单的正则表达式可以做到这一点?您不需要转义下划线: \w{4}+_\w{2}_\w{2} 如果不捕获,可以折叠最后两部分: \w{4}+(?:_\w{2}){2} 但不会变短 (注意:如果您愿意,可以为Java字符串重新添加所需的反斜杠;我更愿意在谈论正则表达式时省略它们:)您不需要转义下划线: \w{4}+_\w{2}_\
aaaa\u bb\u cc
字符串要匹配,并编写了一个正则表达式模式,如
\\w{4}+\\\\\\\\w{2}\\\\\\\\\\\w{2}
它可以工作。有没有简单的正则表达式可以做到这一点?您不需要转义下划线:
\w{4}+_\w{2}_\w{2}
如果不捕获,可以折叠最后两部分:
\w{4}+(?:_\w{2}){2}
但不会变短
(注意:如果您愿意,可以为Java字符串重新添加所需的反斜杠;我更愿意在谈论正则表达式时省略它们:)您不需要转义下划线:
\w{4}+_\w{2}_\w{2}
如果不捕获,可以折叠最后两部分:
\w{4}+(?:_\w{2}){2}
但不会变短
(注:如果你愿意的话,我宁愿在谈论正则表达式的时候忽略它们,而谈论正则表达式的时候,我更愿意在谈论正则表达式的时候忽略它们::)是,你可以只使用<代码>{{{{4}{{{{4}{{{{4}{{{{{2}{{{{2{{{{{{{2}{{2}{2}{{{{{2}{{{{{{2}{2}{{{{2}{{2}{2}{2}{{{{{2}{{2}{{{{{{{2}{2}{{2}{{{{2}{2}{}{2}看起来您的\w不需要匹配下划线,因此您可以使用
[a-zA-Z0-9]
[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{2}
看起来您的\w不需要匹配下划线,因此您可以使用
[a-zA-Z0-9]
[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{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]
,则只需在一个位置(而不是三个位置)执行即可
其他例子
我有时会做我称之为“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]
,则只需在一个位置(而不是三个位置)执行即可
其他例子
对于正则表达式,您的表达式非常简单。=)对于正则表达式,您的表达式非常简单。=)对我能理解;)对我能理解;)@UK:基本上,这个想法是,您不需要显式地写出实际的正则表达式。如果以编程方式派生正则表达式使其更具可读性/可维护性,那么ahead@UK:基本上,这个想法是不需要显式写出实际的正则表达式。如果以编程方式派生正则表达式使其更具可读性/可维护性,那么就直接使用该正则表达式。然而,Java中的\w
真的只是[a-zA-Z0-9]
?在.NET中,至少\d
和\w
与十进制数字或字母几乎匹配,但没有匹配。然而,Java中的\w
真的只是[a-zA-Z0-9]
?在.NET中,至少\d
和\w
与十进制数字或字母的任何内容都匹配。