我有一个文件夹中的文件列表:
maze1.in.txt
maze2.in.txt
maze3.in.txt
我使用子字符串删除了 .txt 扩展名。如何使用正则表达式匹配文件名的前后?我需要它来匹配前面的“maze”和后面的“.in”,中间必须是一个数字(可以是一位数或两位数)。
我试过以下
if (name.matches("name\\din")) {
//dosomething
}
它不匹配任何东西。要使用的正确正则表达式是什么?
我有一个文件夹中的文件列表:
maze1.in.txt
maze2.in.txt
maze3.in.txt
我使用子字符串删除了 .txt 扩展名。如何使用正则表达式匹配文件名的前后?我需要它来匹配前面的“maze”和后面的“.in”,中间必须是一个数字(可以是一位数或两位数)。
我试过以下
if (name.matches("name\\din")) {
//dosomething
}
它不匹配任何东西。要使用的正确正则表达式是什么?
我对您特别要求的内容感到有些困惑
^(maze[0-9]*\.in)$
这将匹配 maze(any number).in
^(maze[0-9]*\.in)\.txt$
这将匹配 maze(any number).in.txt - 不包括 .txt NO NEED FOR USING SUB STRING!
我现在要警惕的是捕获组......我不太确定你在用这个正则表达式做什么。但是,我相信解释捕获组可能会使您受益。
例如,捕获组由 () 表示,这基本上是将它们存储在模式数组中,并且是一种解析内容的方法。
例如 maze1.in.txt
因此,如果您想捕获整行减去 .txt,我会使用它^(maze[0-9]*\.in\.txt)$
但是,如果我想单独捕获事物,我会这样做,^(maze)([0-9]*)(\.in)\.txt$
这将排除 .txt 但包括迷宫、数字和 .in IN 模式数组的单独索引。
您的原始解决方案不起作用,因为字符串“名称”不在您的文本中。这是“迷宫”。
你可以试试这个
name.matches("maze\\d{1,2}\\.in")
d{1,2} 用于匹配一个数字(可以是一位数或两位数)。
您需要正则表达式锚来告诉正则表达式
从头开始:^
并表示字符串的结尾:$
^maze[\d]{0,2}\.in$
或在 Java 中:
name.matches("^maze[\\d]{0,2}\\.in$");
.
此外,您的正则表达式与不接受您给出的示例的点 () 不匹配字符串。您需要添加\.
到正则表达式以接受点,因为.
它是一个特殊字符。
name.matches("^maze[0-9]+\\.in\\.txt$")
在创建正则表达式之前,最好先想想你想用英语做什么。
您想要匹配一个单词maze
后跟一个数字,然后是一个文字句点,.
然后是另一个单词。
word `\w` matches a word character
digit `\d` matches a single digit
period `\.` matches a literal period
word `\w` matches a word character
将它们放在一个字符串中(请记住 Java 转义的双反斜杠和重复上一次匹配一次或多次的优点):
"\\w+\\d\\.\\w+"
以上是格式中任何文件名的通用情况xxx1.yyy
,如果您想匹配maze
,in
特别是,您可以将它们添加为文字字符串。
"maze\\d+\\.in"
示例:http: //ideone.com/rS7tw1