我一直在努力制作一个正则表达式来提取下面的信息,分为3部分,“之间”。只有第一和第二序列(星期五和日期成功)。用正则表达式提取文本“,”
2013年4月26日星期五18:30
我希望有人有经验。
问候
我一直在努力制作一个正则表达式来提取下面的信息,分为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*.*
但是,是的,那是一种超具体到本“小时:分钟再予[...]”格式。如果您使用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)
见strptime和date format文档的详细信息:)
编辑:对不起,我莫名其妙地被假设你使用Python。其他语言也有类似的习语,例如, PHP's date_parse,C#的DateTime.Parse等
C#有一个DateTime.ParseExact函数,它将解析出给定格式字符串的正确部分并构造一个有效的DateTime对象。 – 2013-04-23 20:07:23
我一定在编辑你的评论时一直在编辑我的文章。很高兴看到我们得出同样的结论! :) – m01 2013-04-23 20:08:36
我发布了一个关于如何解析C#中的本地化日期的答案。另外,当它应该是DateTime.ParseExact时,我错误地放了DateTime.Parse。 DateTime.Parse希望日期处于特定格式,否则将无法解析日期。 – 2013-04-23 20:17:30
您没有指定一种语言,所以我打算用标准的REGEX方法来回答这个问题。
(?<=(^|,\s+)).+?(?=(,|$))
将为您工作。
让我分手它在做什么。
(?<=(^|,\s+)
- 预先查看字符串或逗号后跟空格的开头,但不要将其包含在匹配中。所有比赛必须在他们面前。.+?
- 抓住所有角色,但不要贪婪。(?=(,|$))
- 查看字符串或逗号的结尾。所有的比赛都必须有这个背后。当上Friday, 26 Apr 2013, 18:30
你的测试用例跑,我得到的3场比赛:
Friday
26 Apr 2013
18:30
像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();
}
}
}
这将打印出在用户机器上配置的本地化日期和时间。对我来说,它打印出4/16/2013 6:30:00 PM。
你到目前为止尝试过什么?而且,将字符串拆分为''',并且占据中间部分可能更容易。您使用哪种语言进行匹配? – Mathletics 2013-04-23 19:52:33
我不得不同意在''上分割会比使用正则表达式更容易。如果您仅使用正则表达式来创建非确定性有限自动机,则这是不同的情况。 – 2013-04-23 20:02:57