我有几个看起来像这样的字符串:
\r\n\t\StaticWord1:\r\n\t\t2014-05-20 11:03\r\n\t\StaticWord2\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\tWordC WordD\r\n\t\t\t\t\t\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t
我想获取日期(我的示例中的2014-05-20 11:03
- 但会有所不同),Word C
和D
。 (C
和D
都可以是任何字母序列。)
我如何尽可能高效地解析这个问题?我在考虑使用String.Replace
方法,但我认为正则表达式更好? (C#)
答案 0 :(得分:2)
使用此捕获字符串:
Match match = Regex.Match(input, @"(\d\d\d\d-\d\d-\d\d \d\d:\d\d)",
RegexOptions.Multiline);
if (match.Success)
{
string key = match.Groups[1].Value;
DateTime date = DateTime.ParseExact(key, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); // Your result is here
}
答案 1 :(得分:2)
我不知道这是不是最好的方法,但你可以使用像这个msdn示例中的分割: http://msdn.microsoft.com/en-us/library/ms228388.aspx
通过这个例子,您可以轻松地创建一个数组,就像在示例中一样,并使用\ t \ n \ r \ n拆分字符串...并使用循环获取所有单词:
class TestStringSplit
{
static void Main()
{
char[] delimiterChars = { '\r', '\n', '\t' };
string text = "\r\n\t\StaticWord1:\r\n\t\t2014-05-20 11:03\r\n\t\StaticWord2\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\tWordC WordD\r\n\t\t\t\t\t\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t";
System.Console.WriteLine("Original text: '{0}'", text);
string[] words = text.Split(delimiterChars);
System.Console.WriteLine("{0} words in text:", words.Length);
foreach (string s in words)
{
System.Console.WriteLine(s);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
答案 2 :(得分:0)
string input = @"\r\n\t\StaticWord1:\r\n\t\t2014-05-20 11:03\r\n\t\StaticWord2\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\tWordC WordD\r\n\t\t\t\t\t\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t";
string pattern = @"(\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2})(?:[\\r\\n\\t]*StaticWord2[\\r\\n\\t]*)(\w+)\s(\w+)";
Match match = Regex.Match(input, pattern);
然后获取值:
match.Groups[1].Value; // date-time
match.Groups[2].Value; // WordC
match.Groups[3].Value; // WordD