Выражение регулярных выражений и строка в вопросе C # - PullRequest
0 голосов
/ 28 июня 2010

Я хочу разделить мою строку s1 = 6/28/2010 4:46:36 PM и s2 = 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 ]

4 голосов
/ 28 июня 2010

Почему вы вообще используете RegEx для этого?

Используйте DateTime.TryParse или DateTime.Parse для анализа входной строки в DateTime объект (если вам нужен точный анализ, есть также ParseExact и TryParseExact, которые принимают строку формата).

Затем вы можете использовать DateTime.ToString с пользовательская строка формата , которая будет выводить точный вывод, который вы хотите непосредственно из DateTime объектов.

DateTime.ToString("yyyyMMddHHmmssff");
3 голосов
/ 28 июня 2010

Точка (.) соответствует любому символу при использовании в регулярном выражении. Вы должны избежать его с обратной косой чертой:

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

Обратите внимание, что это полностью отличается от экранирования, выполняемого в строковых литералах - это часть языка регулярных выражений, а не языка C #.

(Я бы также согласился с предложением Одеда о том, что использование регулярного выражения, вероятно, в любом случае не самое подходящее решение).

...