2010-06-28 5 views
0

Je veux diviser ma chaîne s1 = 6/28/2010 4:46:36 PM et s2 = 16:46:36.5013946. et les concaténer vers le nouveau s3 = 20010062816463650. Mais quand je divise s2. mon regex ne fonctionne pas. J'étais en pause maintenant.Expression Regex & chaîne En C# Question

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: 

Répondre

4

Pourquoi utilisez-vous RegEx du tout pour cela?

Utilisez DateTime.TryParse ou DateTime.Parse pour analyser la chaîne d'entrée à un objet DateTime (si vous avez besoin d'une exacte Parse, il y a aussi ParseExact et TryParseExact qui prennent une chaîne de format).

Vous pouvez ensuite utiliser DateTime.ToString avec un custom format string qui affichera la sortie exacte que vous voulez directement à partir de DateTime objets.

DateTime.ToString("yyyyMMddHHmmssff"); 
+0

Merci beaucoup de m'apprendre la bonne solution. –

3

Un point (.) correspond un caractère lorsqu'il est utilisé dans une expression régulière. Vous devez échapper avec une barre oblique inverse:

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

Notez que ceci est tout à fait distincte de l'échappement réalisée dans la chaîne littéraux - il fait partie de la langue des expressions régulières, pas le langage C#.

(Je suis également d'accord avec la suggestion de Oded que l'utilisation d'une expression régulière est probablement pas la solution la plus appropriée ici de toute façon.)