我有一個字符串,格式如下。 (我加了標記,以獲得新行,以顯示正確)多行正則表達式匹配第一次出現但不能匹配第二個
-- START BELOW THIS LINE --
2013-08-28 00:00:00 - Tom Smith (Work notes)
Blah blah
b;lah blah
2013-08-27 00:00:00 - Tom Smith (Work notes)
ZXcZXCZXCZX
ZXcZXCZX
ZXCZXcZXc
ZXCZXC
-- END ABOVE THIS LINE --
我想獲得一個正則表達式,讓我來提取字符串的兩個獨立的部分信息。
下面的表達式第一部分匹配成功:
^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.*) \\(Work notes\\)\n([\\w\\W]*)(?=\n\n\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} - .* \\(Work notes\\)\n)
我試圖找出一個辦法,我可以修改它來獲取字符串的第二部分。我嘗試過類似下面的內容,但最終將匹配擴展到了字符串的末尾。它就像是優先考慮OR之後的表達式。
^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.*) \\(Work notes\\)\n([\\w\\W]*)(?:(?=\n\n\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} - .* \\(Work notes\\)\n)|\n\\Z)
任何幫助,將不勝感激
- 編輯 -
這裏是我創建嘗試並獲得這個正確的測試程序的副本。在這種情況下,我還添加了第三條消息,並且我的RegEx突破了。
using System;
using System.Text.RegularExpressions;
namespace RegExTest
{
class MainClass
{
public static void Main (string[] args)
{
string str = "2013-08-28 10:50:13 - Tom Smith (Work notes)\nWhat's up? \nHow you been?\n\n2013-08-19 10:21:03 - Tom Smith (Work notes)\nWork Notes\n\n2013-08-19 10:10:48 - Tom Smith (Work notes)\nGood day\n\n";
var regex = new Regex ("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.*) \\(Work notes\\)\n([\\w\\W]*)\n\n(?=\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} - .* \\(Work notes\\)\n)",RegexOptions.Multiline);
foreach (Match match in regex.Matches(str))
{
if (match.Success)
{
for (var i = 0; i < match.Groups.Count; i++)
{
Console.WriteLine('>'+match.Groups [i].Value);
}
}
}
Console.ReadKey();
}
}
}
- 編輯 -
只是要清楚,我想提取數據的日期和時間標記(作爲一個項目),名稱,和「身體」來自每個「段落」。
我們可以看到您的通話代碼嗎? – Botonomous
你能發佈你用來構造正則表達式對象並執行匹配的確切代碼嗎?你很可能沒有使用正確的標誌。 –
什麼可以出現在每個段落的正文中? –