繁体   English   中英

使用正则表达式匹配字符串的开头和结尾[Java]

[英]Using regex to match beginning and end of string [Java]

我有一个文件夹中的文件列表:

maze1.in.txt
maze2.in.txt
maze3.in.txt

我已经使用substring来删除.txt扩展名。 如何使用正则表达式匹配文件名的正面和背面? 我需要它来匹配前面的“迷宫”和后面的“.in”,中间必须是一个数字(可以是单个或两个数字)。

我尝试了以下内容

if (name.matches("name\\din")) {
    //dosomething
}

它与任何东西都不匹配。 使用正确的正则表达式是什么?

我有点困惑你特别要求的东西

    ^(maze[0-9]*\.in)$

正则表达式可视化

这将匹配迷宫(任何数字).in

 ^(maze[0-9]*\.in)\.txt$

正则表达式可视化

这将匹配迷宫(任何数字).in.txt - 排除.txt不需要使用子字符串!

在Debuggex上实时编辑

我现在担心的是现在是捕捉组 ......我不太确定你在用这个正则表达式做什么。 但是,我相信解释捕获组可能会让您受益。

例如,捕获组由()表示,这基本上将它们存储在模式数组中,并且是一种解析东西的方法。

例如maze1.in.txt

因此,如果你想要捕获整行减去.txt,我会使用这个^(maze[0-9]*\\.in\\.txt)$

但是,如果我想分别捕捉东西,我会这样做^(maze)([0-9]*)(\\.in)\\.txt$这将排除.txt但包括迷宫,数字和.in IN模式数组的单独索引。

你需要正则表达式锚来告诉正则表达式

从头开始: ^

并发出字符串结尾的信号: $

^maze[\d]{0,2}\.in$

或者在Java中:

name.matches("^maze[\\d]{0,2}\\.in$");

此外,您的正则表达式不匹配带有点( . )的字符串,它不接受您给出的示例。 你需要添加\\. 到正则表达式接受点因为. 是一个特殊的角色。

您的原始解决方案不起作用,因为字符串“name”不在您的文本中。 这是“迷宫”。
你可以试试这个

name.matches("maze\\d{1,2}\\.in")

d {1,2}用于匹配数字(可以是单数字或双数字)。

在创建正则表达式之前,想一想用英语做什么总是好的。

你想匹配一个单词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

name.matches("^maze[0-9]+\\.in\\.txt$")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM