[英]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不需要使用子字符串!
我现在担心的是现在是捕捉组 ......我不太确定你在用这个正则表达式做什么。 但是,我相信解释捕获组可能会让您受益。
例如,捕获组由()表示,这基本上将它们存储在模式数组中,并且是一种解析东西的方法。
例如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.