Java - 从字符串中提取日期的正则表达式

4

我需要从这个字符串中提取日期:

BB inform: 购买您的门票,最终卡号xxxx,$ 00.00,在04/10,11:28。如果您不确认,请致电40032 2412。

另外,完整日期是04/10/2015

日期格式为dd/MM或dd/MM/yyyy

代码:

String mydata =“BB inform: 购买您的门票,最终卡号xxxx,$ 00.00,在04/10,11:28。如果您不确认,请致电40032 2412。”;

    Pattern p = Pattern.compile("(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d");
    Matcher m = p.matcher(mydata);

结果: m.matches() == false

请发布一段您尝试过的代码,并说明您失败的地方。 - Some guy
抱歉,我现在才发布了。 - Pedro Fernandes
2个回答

9
您可以尝试使用以下正则表达式:
Matcher m = Pattern.compile("(\\d{1,2}/\\d{1,2}/\\d{4}|\\d{1,2}/\\d{1,2})", Pattern.CASE_INSENSITIVE).matcher(string);
        while (m.find()) {
            System.out.println(m.group(1));
        }

它正在寻找一个DD/MM的模式,或者是在寻找一个DD/MM/YYYY的模式。

请查看此链接


它不能运行。我猜是因为日期前后有其他文字的缘故。如果字符串只包含日期那么这将能运行,但不是我的情况。 - Pedro Fernandes
1
它起作用了。我复制了你的文本并为其创建了正则表达式。 - Madushan Perera
1
我可以证实。我复制了这段代码片段并对OP的字符串运行它,它确实返回了日期。 - Some guy
@MadushanPerera 兄弟,你知道我怎么获取"$"后面的值吗?如果这个值是像$0000,00这样的呢? - Pedro Fernandes

0
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 
  Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));

        }

Pattern.MULTILINE 确保在字符串中搜索 DD/MM 或 DD/MM/YYYY 的匹配项(如果存在)。


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