2016-10-17 2 views
1

Как вы можете написать функцию/регулярное выражение, которое дает вам первый блок символов + первые числа, не разделенные пробелом, и опустить остальные? Вот некоторые примеры того, что результат должен выглядеть данным различных строк («вход» -> «результат»):Получить подстроку с текстом + пробел + номер и обрезать остальные

"abc 1" -> "abc 1" 
"abc def 1" -> "abc def 1" 
"abc-def 1" -> "abc-def 1" 
"abc 1b" -> "abc 1" 
"abc 11 b3" -> "abc 11" 
"abc 11 3" -> "abc 11" 
"abc 11b" -> "abc 11" 
+0

Возможно, это '[a-zA-Z] * \ d *'. или это '\ S * \ d *' –

+0

Я только что проверил его, но я пошел с регулярным выражением для удобства чтения, спасибо. – mdc

ответ

2

Один из способов (слова содержат аг -)

Match match = Regex.Match(value, @"^([A-Za-z-]+) (\d+)"); 
if (match.Success) 
{ 
    var word = match.Groups[1].Value; 
    var num = match.Groups[2].Value; 
} 
+0

Вы не соответствовали второй строке. На самом деле должно быть '^ ([A-Za-z-] +) (\ d +)'. – Gavin

0

Это должно работать ...

^(.*)[0-9]

1

Вот решение LINQ, с помощью TakeWhile и SkipWhile методы. (Я проверил все свои записи, и он работает):

string str = "abc 11 3"; 
var result = string.Concat(string.Join("", str.TakeWhile(c => !char.IsDigit(c))), 
      string.Join("", str.SkipWhile(c => !char.IsDigit(c)).TakeWhile(char.IsDigit))); 

Только не забудьте добавить using System.Linq; к вашей using директиве первым.

1
class Program 
    { 
     static void Main(string[] args) 
     { 

      string[] Value = new string[] { 
"abc 1", 
"abc def 1", 
"abc-def 1", 
"abc 1b", 
"abc 11 b3", 
"abc 11 3", 
"abc 11b" 
      }; 


      foreach (string value in Value) 
      { 
       Match match = Regex.Match(value, @"^([A-Za-z-]+) (\d+)"); 
       if (match.Success) 
       { 
        var word = match.Groups[1].Value; 
        var num = match.Groups[2].Value; 
        Console.WriteLine(word + " " + num); 
       } 
      } 

     } 
    } 


//abc 1 
//abc-def 1 
//abc 1 
//abc 11 
//abc 11 
//abc 11 
+0

Алекс отвечает. – Harminder

Смежные вопросы