我一直在努力製作一個正則表達式來提取下面的信息,分爲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