【问题标题】:Split string after n amount of digits occurrence在出现 n 个数字后拆分字符串
【发布时间】:2025-12-01 01:15:02
【问题描述】:

我在这里解析一些文件夹名称。我有一个程序可以列出文件夹的子文件夹并解析文件夹名称。

例如,一个文件夹可以这样命名:

“Folder.Name.1234.Some.Info.Here-ToBeParsed”

我想解析它,所以名称将是“文件夹名称”。目前我首先使用 string.replaceAll() 去除特殊字符,然后是这个 4 位数字序列。我想在那一点上拆分字符串。我怎样才能做到这一点?

目前我的代码如下所示:

// Parsing string if regex p matches folder's name
if(b) {
    //System.out.println("Folder: \" " + name + "\" contains special characters.");
    String result = name.replaceAll("[\\p{P}\\p{S}]", " "); // Getting rid of all punctuations and symbols.
    //System.out.println("Parsed: " + name + " > " + result);

    // If string matches regex p2
    if(b2) {
        //System.out.println("Folder: \" " + result + "\" contains release year.");
        String parsed_name[] = result.split("20"); // This is the line i would like to split when 4-digits in row occur.
        //System.out.println("Parsed: " + result + " > " + parsed_name[0]);
        movieNames.add(parsed_name[0]);
    }

或者也许有更简单的方法来做到这一点?提前致谢!

【问题讨论】:

  • 你不是盗版,是吗? :)
  • 从不。只是想学习一些正则表达式。 :)

标签: java regex digits


【解决方案1】:

你应该像这样保持简单:

String name = "Folder.Name.1234.Some.Info.Here-ToBeParsed";
String repl = name.replaceFirst( "\\.\\d{4}.*", "" ).
         replaceAll( "[\\p{P}\\p{S}&&[^']]+", " " );
//=> Folder Name
  • replaceFirst 正在删除 DOT 和 4 位数字之后的所有内容
  • replaceAll 将所有标点符号和空格(撇号除外)替换为一个空格

【讨论】:

  • 感谢您的回复。你能解释一下这个正则表达式吗?它似乎以某种方式工作,但我也想替换其他特殊字符,如 ) 、 (、 [、 ] ,而不仅仅是“.”。应该在问题中更清楚地说明.. :)
  • 好的,这就够了。谢谢!还有一个问题:正则表达式现在很好,但如果我不希望它解析字符:'(撇号),该怎么做?
最近更新 更多