0

我需要为给定的一组字符串动态创建一个正则表达式,这些字符串是一组日期。

String dates[] = {"25/11/1995", "26/11/1995", "27/11/1995", "28/11/1995","29/11/1995"};

所以正则表达式必须生成为2[5-9]/11/1995

我怎样才能实现这是Java 6?

4

1 回答 1

0

这样的事情会让你前进吗?

import java.util.ArrayList;
import java.util.Arrays;

public class MyClass {
    public static void main(String args[]) {
        // Assume all data is dates
        String dates[] = {"25/11/1995", "26/11/1995", "27/11/1995", "28/11/1995","29/11/1995"};

        // Determine the delimeter
        String delimeter = String.valueOf(dates[0].replaceAll("\\d", "").charAt(0));

        // Separate out the days, months, and years distictively
        ArrayList<String> days = new ArrayList<String>();
        ArrayList<String> months = new ArrayList<String>();
        ArrayList<String> years = new ArrayList<String>();
        for (String date : dates) {
            String[] pieces = date.split(delimeter);
            if (!days.contains(pieces[0])) {
                days.add(pieces[0]);
            }

            if (!months.contains(pieces[1])) {
                months.add(pieces[1]);
            }

            if (!years.contains(pieces[2])) {
                years.add(pieces[2]);
            }
        }

        // Generate regex
        System.out.print((days.size() > 1) ? "(" + String.join("|", days) + ")" : days.get(0));  
        System.out.print(delimeter.contentEquals("/") ? "\\" + delimeter : delimeter); 
        System.out.print((months.size() > 1) ? "(" + String.join("|", months) + ")" : months.get(0));
        System.out.print(delimeter.contentEquals("/") ? "\\" + delimeter : delimeter);
        System.out.print((years.size() > 1) ? "(" + String.join("|", years) + ")" : years.get(0));
    }
}

结果:

(25|26|27|28|29)\/11\/1995

我知道它没有给出您在问题中发布的确切正则表达式,但它是一个有效的正则表达式。

我在Regex101测试了它

要准确获得您想要的,只需使正则表达式的生成更智能以识别序列。

于 2018-07-04T15:55:10.033 回答