0

我一直在努力制作一个正则表达式来提取下面的信息,分为“,”之间的 3 部分。只有第一个和第二个序列(星期五和日期已成功)。

2013 年 4 月 26 日星期五 18:30

我希望有人有经验。

此致

4

5 回答 5

3

为什么不简单地拆分字符串并修剪各个部分的多余空格?例如,用 C# 详细编写:

string input = "Friday, 26 Apr 2013, 18:30";

string[] parts = input.Split(',');

for (int i = 0; i < parts.Length; i++)
{
    parts[i] = parts[i].Trim();
}

Console.WriteLine(parts[0]);    // "Friday"
Console.WriteLine(parts[1]);    // "26 Apr 2013"
Console.WriteLine(parts[2]);    // "18:30"

如果您真的想为此使用正则表达式,^(.*),(.*),(.*)$应该可以:

string input = "Friday, 26 Apr 2013, 18:30";

Regex regex = new Regex("^(.*),(.*),(.*)$", RegexOptions.Singleline);
Match match = regex.Match(input);

Console.WriteLine(match.Groups[1].Value.Trim());    // "Friday"
Console.WriteLine(match.Groups[2].Value.Trim());    // "26 Apr 2013"
Console.WriteLine(match.Groups[3].Value.Trim());    // "18:30"

添加适当的错误检查留给读者作为练习。

于 2013-04-23T19:57:01.047 回答
1

以下正则表达式匹配整个部分:

, 18:30
I hope someone has the experience.
Best regards

,+\s[0-9]+:[0-9]+ \r*.*

但是,是的,这对于这种“, Hour:Minuts [...]” 格式非常特殊。如果您使用 PHP 或您的语言中的等价物,则应该进行拆分。

于 2013-04-23T20:01:30.657 回答
1

我认为你真正想要的是这样的:

from datetime import datetime
s="Friday, 26 Apr 2013, 18:30"
d=datetime.strptime(s, "%A, %d %b %Y, %H:%M")
d

Out[7]: datetime.datetime(2013, 4, 26, 18, 30)

有关详细信息,请参阅strptime日期格式文档 :)

编辑:对不起,我以某种方式假设您使用的是 Python。不过其他语言也有类似的习语,例如PHP 的 date_parse,C# 的DateTime.Parse等。

于 2013-04-23T20:01:36.630 回答
0

就像 m01 的回答一样,您可以使用 C# 尝试这种方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace TestDate
{
    class Program
    {
        static void Main(string[] args)
        {
            string dateString = "Friday, 26 Apr 2013, 18:30"; // Modified from MSDN
            string format = "dddd, dd MMM yyyy, HH:mm";

            DateTime dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
            Console.WriteLine(dateTime);
            Console.Read();
        }
    }
}

这将打印出在用户机器上配置的本地化日期和时间。对我来说,它在 2013 年 4 月 16 日下午 6:30:00 打印出来。

于 2013-04-23T20:15:37.917 回答
0

您没有指定语言,所以我将使用标准的 REGEX 方法来回答这个问题。

(?<=(^|,\s+)).+?(?=(,|$))会为你工作。

让我打破它在做什么。

  • (?<=(^|,\s+)- 向前查找字符串或逗号的开头,后跟空格,但不要将其包含在匹配中。所有比赛都必须在他们面前有这个。
  • .+?- 抓住所有角色,但不要贪婪。
  • (?=(,|$)) - 在后面寻找字符串或逗号的结尾。所有比赛都必须在他们身后有这个。

在您的测试用例上运行时Friday, 26 Apr 2013, 18:30,我得到 3 个匹配项:

  • Friday
  • 26 Apr 2013
  • 18:30
于 2013-04-23T20:04:07.087 回答