首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为一组给定的日期字符串生成正则表达式

为一组给定的日期字符串生成正则表达式
EN

Stack Overflow用户
提问于 2018-07-04 21:58:09
回答 1查看 90关注 0票数 0

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

代码语言:javascript
运行
复制
String dates[] = {"25/11/1995", "26/11/1995", "27/11/1995", "28/11/1995","29/11/1995"};

因此,必须将正则表达式生成为2[5-9]/11/1995

我如何在Java 6中实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 23:55:10

像这样的事情会让你振作起来吗?

代码语言:javascript
运行
复制
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));
    }
}

结果:

代码语言:javascript
运行
复制
(25|26|27|28|29)\/11\/1995

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

我在Regex101测试过了

要获得您想要的内容,只需使regex的生成更智能地识别序列即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51175468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档