我正在尝试构建一个正则表达式,它将验证具有单点的文件名,并且文件名具有以下划线分隔的三个部分
这是我的正则表达式:
(?<appname>[^_]*)_(?<eventtype>[^_]*)_(?<counter>[^_]*).*
输入字符串
ABA_ABA_2015_478.csv - 应该失败
ABA_ABA_2015478.js.csv - 应该失败
ABC_BCD_XYZ.js - 应该通过
请帮我解决这个问题。
最佳答案
您可以使用此正则表达式:
^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\.[^.]+$
如果您使用matches()
如果您使用 Java 中的方法,则无需使用 anchor ,因为 anchor 是隐式的。
正则表达式分解:
-
^
:开始 -
(?<appname>[^_.]+)
:匹配并分组长度为 1+ 且不属于_
的任何字符和点 -
(?<eventtype>[^_.]+)
:匹配并分组长度为 1+ 且不属于_
的任何字符和点 -
_
:匹配_
-
(?<counter>[^._]*)
:匹配并分组长度为 1+ 且不属于_
的任何字符和点 -
\.
: 匹配一个点 -
[^.]+
: 匹配除点之外的任何1+长度的字符 -
$
:结束
对于 Java 使用:
final String re = "^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\\.[^.]+$";
关于java - 正则表达式接受带有单点的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930229/