如何使用正则表达式获取文件扩展名?

6
我正在尝试从包含文件名或目录的字符串中提取子字符串。被提取的子字符串应该是文件扩展名。我在网上搜索了一些内容,发现可以使用正则表达式来完成这个任务。我发现 ^\.[\w]+$ 是一个可以用来查找文件扩展名的模式。问题在于我并不完全熟悉正则表达式及其功能。
基本上,如果我有一个像 C:\Desktop\myFile.txt 这样的字符串,我希望正则表达式能够找到并创建一个新的字符串,其中只包含 .txt

给你:http://www.regular-expressions.info/(一个很棒的资源,有许多与语言无关和特定于语言的辅助工具。) - BlackVegetable
OP只想提取扩展名,而这不是重复问题所询问的。 - anubhava
3个回答

22

捕获文件扩展名的正则表达式为:

(\\.[^.]+)$

需要注意的是,点号需要进行转义才能匹配一个字面上的点号。然而,[^.]是一个不需要任何转义就可以匹配字面上的dot的否定字符类。

\\.        # match a literal dot
[^.]+      # match 1 or more of any character but dot
(\\.[^.]+) # capture above test in group #1
$          # anchor to match end of input

我认为空格不能成为文件扩展名的一部分吧?或许可以使用 [\w][^\s] 替代 [^.] - Inigo
@Inigo:Unix文件系统允许使用任何字符作为扩展名。我可以创建一个名为a.b c的文件。 - anubhava
当然可以,但我真的怀疑这是否算作文件扩展名,只是一个带有点号的文件名而已。这是我的意见。 - Inigo

6
您可以使用String类的split()函数。在这里,您可以传递一个正则表达式。在本例中,它将是“\.”。这将把字符串分成两部分,第二部分将给出文件扩展名。
public class Sample{
  public static void main(String arg[]){
    String filename= "c:\\abc.txt";

    String fileArray[]=filename.split("\\.");

    System.out.println(fileArray[fileArray.length-1]); //Will print the file extension
  }
}

2
如果您不想使用正则表达式,可以尝试类似以下的方法:
String fileString = "..." //this is your String representing the File
int lastDot = fileString.lastIndexOf('.');
String extension = fileString.subString(lastDot+1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接