我正在尝试构建一个正则表达式,它将验证具有单个点的文件名,文件名由下划线分隔三个部分
这是我的正则表达式:
(?<appname>[^_]*)_(?<eventtype>[^_]*)_(?<counter>[^_]*).*
输入字符串
ABA_ABA_2015_478.csv - 应该失败
ABA_ABA_2015478.js.csv - 应该失败
ABC_BCD_XYZ.js - 应该通过
请帮助我。
答案 0 :(得分:0)
在正则表达式中,点字符表示&#34;任何字符&#34;。你需要使用反斜杠来逃避它(在Java中,你需要加倍反斜杠以逃避Java字符串中的反斜杠本身。)
所以,对于正确的部分,像\.\w+
这样的东西可以做,如果你还想要一些字符跟随点。此外,在左侧部分中,从部分中排除点 - [^_.]*
(或[^_.]+
表示非空)。
答案 1 :(得分:0)
您可以使用此正则表达式:
^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\.[^.]+$
如果你在Java中使用matches()
方法,那么你不需要使用锚点,因为锚是隐含的。
RegEx分手:
^
:开始(?<appname>[^_.]+)
:匹配并分组任何长度不是_
且点(?<eventtype>[^_.]+)
:匹配并分组任何长度不是_
且点_
:匹配_
(?<counter>[^._]*)
:匹配并分组任何长度不是_
且点\.
:匹配一个点[^.]+
:匹配任何长度不是点$
:结束对于Java使用:
final String re = "^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\\.[^.]+$";