2016-10-12 17 views
3

私は正規表現を使用しようとしていると私は次の文字列を持っているとは異なる印刷文字列:C#の正規表現:パターン

M3A4S0S3I2M1O4 
M3a4s0s3i2m1o4 
m3a4s0s3i2m1o4 
F3a4i0l4l1a6 
30470041106042700156 
30470031201042506146 

文字列パターンはstring pattern = @"\D";であると私は印刷する:

M3A4S0S3I2M1O4 
M3a4s0s3i2m1o4 
m3a4s0s3i2m1o4 
F3a4i0l4l1a6 

この文字列で一致するものが見つかるためです。 30470041106042700156 30470031201042506146は一致するものが見つからないため、印刷しません。 私はコードを書く:

using System; 
using System.Text.RegularExpressions; 

public class Example 
{ 
    public static void Main() 
    { 
     string pattern = @"\D"; 
     string input = @"M3A4S0S3I2M1O4 M3a4s0s3i2m1o4 m3a4s0s3i2m1o4 F3a4i0l4l1a6 30470041106042700156 30470031201042506146"; 

をしかし、私はそれを終えることができるか、私は知りません。どうすれば修正できますか?

+0

あなたは別の行に対して複数行の文字列、または単にテストを処理したいですか?それは 'Listであるべきですか? input = new List (){" M3A4S0S3I2M1O4 "、...}'? –

答えて

2
using System; 
using System.Text.RegularExpressions; 

public class Program { 
    public static void Main() { 
     string[] input = { "M3A4S0S3I2M1O4", "M3a4s0s3i2m1o4", "m3a4s0s3i2m1o4", "F3a4i0l4l1a6", "30470041106042700156", "30470031201042506146" }; 
     foreach (var line in input) 
      if (Regex.IsMatch(line, @"\D")) 
       Console.WriteLine(line); 
    } 
} 

は、あなたが参加し、LINQ、実際にここに正規表現を必要とする単純な分割を使用していない

M3A4S0S3I2M1O4 
M3a4s0s3i2m1o4 
m3a4s0s3i2m1o4 
F3a4i0l4l1a6 
1

出力:

string input = @"M3A4S0S3I2M1O4 
M3a4s0s3i2m1o4 
m3a4s0s3i2m1o4 
F3a4i0l4l1a6 
30470041106042700156 
30470031201042506146"; 
string res = string.Join("\r\n", input.Split(new[] {"\r\n"}, StringSplitOptions.None) 
     .Where(line => !line.All(Char.IsDigit)) 
     .ToArray()); 

.Where(line => !line.All(Char.IsDigit))部分が行だけを保持しています全桁ではありません。

文字列のリストがある場合は、string.Join("\r\n", input.Split(new[] {"\r\n"}, StringSplitOptions.None)をリスト変数に置き換えて、string.Joinを省略します。

enter image description here