正则表达式&字符串在C#问题中

时间:2010-06-28 08:53:15

标签: c# regex string-concatenation

我想拆分字符串s1 = 6/28/2010 4:46:36 PMs2 = 16:46:36.5013946。 并将它们连接到新的s3 = 20010062816463650。但是当我分裂s2时。我的正则表达式不起作用。我现在暂停了。

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace ConAppTest
{
    class Program
    {

        static void Main(string[] args)
        {
            string s1 = ""; // date
            string s2 = ""; // time
            Console.WriteLine("{0}", DateTime.Now);
            s1 = DateTime.Now.ToString();
            Console.WriteLine("{0}", DateTime.Now.TimeOfDay);
            s2 = DateTime.Now.TimeOfDay.ToString();

            Regex regex1 = new Regex(@" |:|/");    //6/28/2010 2:19:21 PM
            char[] separators1 = { ' ', '/' };
            foreach (string sub1 in regex1.Split(s1))
            {
                Console.WriteLine("Word1: {0}", sub1);
            }

            Regex regex2 = new Regex(@":|.");  //14:19:21.8771215
            char[] separators2 = { ':', '.' };
            foreach (string sub2 in regex2.Split(s2))
            {
                Console.WriteLine("Word2: {0}", sub2);
            }
        }



    }
}
//output
//6/28/2010 4:46:36 PM
//16:46:36.5013946
//Word1: 6
//Word1: 28
//Word1: 2010
//Word1: 4
//Word1: 46
//Word1: 36
//Word1: PM
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:
//Word2:

2 个答案:

答案 0 :(得分:4)

为什么你要使用RegEx呢?

使用DateTime.TryParseDateTime.Parse将输入字符串解析为DateTime对象(如果需要完全解析,还有ParseExactTryParseExact采用格式字符串)。

然后,您可以将DateTime.ToStringcustom format string一起使用,直接从DateTime个对象输出您想要的输出。

DateTime.ToString("yyyyMMddHHmmssff");

答案 1 :(得分:3)

在正则表达式中使用时,点(.)匹配任何字符。你需要用反斜杠来逃避它:

Regex regex2 = new Regex(@":|\.");

请注意,这与字符串文字中执行的转义完全分开 - 它是正则表达式语言的一部分,而不是C#语言。

(我也同意Oded的建议,无论如何,使用正则表达式可能不是最合适的解决方案。)