我一直在努力制作一个正则表达式来提取下面的信息,分为“,”之间的 3 部分。只有第一个和第二个序列(星期五和日期已成功)。
2013 年 4 月 26 日星期五 18:30
我希望有人有经验。
此致
为什么不简单地拆分字符串并修剪各个部分的多余空格?例如,用 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"
添加适当的错误检查留给读者作为练习。
以下正则表达式匹配整个部分:
, 18:30
I hope someone has the experience.
Best regards
,+\s[0-9]+:[0-9]+ \r*.*
但是,是的,这对于这种“, Hour:Minuts [...]” 格式非常特殊。如果您使用 PHP 或您的语言中的等价物,则应该进行拆分。
我认为你真正想要的是这样的:
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)
编辑:对不起,我以某种方式假设您使用的是 Python。不过其他语言也有类似的习语,例如PHP 的 date_parse,C# 的DateTime.Parse等。
就像 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 打印出来。
您没有指定语言,所以我将使用标准的 REGEX 方法来回答这个问题。
(?<=(^|,\s+)).+?(?=(,|$))
会为你工作。
让我打破它在做什么。
(?<=(^|,\s+)
- 向前查找字符串或逗号的开头,后跟空格,但不要将其包含在匹配中。所有比赛都必须在他们面前有这个。.+?
- 抓住所有角色,但不要贪婪。(?=(,|$))
- 在后面寻找字符串或逗号的结尾。所有比赛都必须在他们身后有这个。在您的测试用例上运行时Friday, 26 Apr 2013, 18:30
,我得到 3 个匹配项:
Friday
26 Apr 2013
18:30