2016-04-08 8 views
0
string test = "item_id - description (moreInfo)" 

Я хочу ознакомиться с описанием.Как получить строку между двумя конкретными символами в C#?

тест всегда будет начинаться с "item_id -"

тест всегда будет заканчиваться "(ххх)"

тест может иметь что-либо в описании, как пространство, тире и т.д.

Таким образом, в основном, мне нужно, чтобы захватить строку после того, как первый «-» до последнего «(»

Я с трудом с этим

+7

чем проблема с String.indexOf и string.LastIndexOf? Довольно просто – Steve

+0

Что такое случаи, например 'item_id - description (vghvhj) (moreInfo)', 'item_id - description (more (((Info)'? – rock321987

+0

regex class: https://msdn.microsoft.com/en-us /library/system.text.regularexpressions.regex(v=vs.110).aspx –

ответ

3
using System; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static void WithRegex(string test) 
    { 
     string extracted = new Regex(@"- ?(.*) ?\([^\(]+$").Match(test).Groups[1].Value; 
     Console.WriteLine("Extracted: {0}", extracted); 
    } 

    public static void WithoutRegex(string test) 
    { 
     string extracted = test.Substring(test.IndexOf("-") + 1, test.LastIndexOf("(") - test.IndexOf("-") - 1).Trim(); 
     Console.WriteLine("Extracted: {0}", extracted); 
    } 

    public static void Main() 
    { 
     string test = "item_id - description (something else) !onuth - hi you (moreInfo)"; 
     WithRegex(test); 
     WithoutRegex(test); 
    } 
} 
.

Печать

Extracted: description (something else) !onuth - hi you 
Extracted: description (something else) !onuth - hi you 
+0

извините, должно быть, было более ясно. item_id будет ID, но он будет другим ... 3292, 32804, 333, 1133 , и т. д. то же самое с частью (moreinfo) –

+0

Не имеет значения, он будет соответствовать. –

+0

работал красиво. спасибо вам, сэр. Я могу принять ваш ответ за 3 минуты –

0

Вот это должно, чтобы вы начали на правильном пути:

var reg = new Regex(@"^item_id - (.+) \(moreInfo\)$"); 
string test = "item_id - description (moreInfo)"; 
var match = reg.Match(test); 

if(match.Success) 
{ 
    if(match.Groups.Count > 1) 
    { 
     var group = match.Groups[1]; 
     System.Diagnostics.Debug.Print(group.Value); // prints your description.... 
    } 
} 
+0

ry, должно было быть более ясным. item_id будет ID, но он будет другим ... 3292, 32804, 333, 1133 и т. д. то же самое с частью (moreinfo) –

+0

@Rj. - Ах, да, это было бы полезно впереди. –

0
string input = "1234 - description (moreInfo)"; 
string pattern = "\\d+\\s*-([^\\(]+)"; 
Regex rgx = new Regex(pattern); 

Match match = rgx.Match(input); 

if (match.Success) { 
    Console.WriteLine(match.Groups[1].Value); 
} 

Ideone Demo

+0

извините, должно быть, было более ясно. item_id будет ID, но он будет другим ... 3292, 32804, 333, 1133 и т. д. –

+0

Я думаю, что 'item_id' не является константой, это может быть число или что-то еще. –

+0

@Rj. updated..do вы хотите, чтобы ваша строка заканчивалась символом '(moreInfo)'? – rock321987

0

Вы можете сделать это с помощью комбинации IndexOf и LastIndexOf используя Substring

test.Substring(test.IndexOf("- ") + 2, test.LastIndexOf("(") - (test.IndexOf("- ") + 2));

0

Без использования Regex:

public void SelectPartOfString() 
{ 
    string test = "item_id - description (moreInfo)"; 
    int beginIndex = test.IndexOf("-") + 1; //char immediately after `-` 
    int endIndex = test.LastIndexOf("(") - 1; //char immediately before last `(` 

    string subString = test.Substring(beginIndex, (endIndex - beginIndex)).Trim(' '); //remove leading/trailing spaces 

    Console.WriteLine(subString); 
} 
Смежные вопросы