using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"# Time.
(?<=\|) (?:\s+ [^(]? )
([0-2][0-9]) (?:\s*) (:) \s* ([0-5][0-9]) (?:\s*)
(-)? (?: (?:\s*) ([0-2][0-9]) (?:\s*) (:) (?:\s*) ([0-5][0-9]) )?
(?= [^\)]? \s+ \|)
|
# Total.
(?<=\| ) (?:\s+) (\d+[m]) (?=\s+\|)";
string input = @"# Todo
| Tracker | Task | Backlog |
| ----------: | :------------- | :------------ |
| 00:00-00:00 | [x] Task one | [[wiki.link |
| 00:00-00:00 | | |
| 00:00-00:00 | | |
| 00:00- | | |
| | | |
| 10m | | |
| | | |
| 00:00 | [<] Task two | [[wiki.link]] |
| | [<] Task three | [[wiki.link]] |
| (00:00) | [<] Task two | [[wiki.link]] |
| 00:00) | [<] Task two | [[wiki.link]] |
Time outside the table 00:00 that must not be selected.
Group 1: `00` (timer.start.hour)
Group 2: `:` (timer.start.colon)
Group 3: `00` (timer.start.minute)
Group 4: `-` (timer.separator)
Group 5: `00` (timer.end.hour)
Group 6: `:` (timer.end.colon)
Group 7: `00` (timer.end.minute)
Group 8: `00` (timer.total)
# Alternative
# Time (not supported by VS Code).
#(?=
# \| \s+ .*?
# ([0-2][0-9]) \s* (:) \s* ([0-5][0-9])
# (?:
# \s* (-) \s*
# ([0-2][0-9]) \s* (:) \s* ([0-5][0-9])
# )?
# .*? \s+ \|
#)
#|
# Total not supported by VS Code).
#(?= \| \s+ (\dm) \s+ \| )";
RegexOptions options = RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx