2011-01-25 3 views
1

Что такое регулярное выражение, чтобы найти текст # 2? Образец состоит в том, что это первое появление «z =» после c. Текст, который я хочу, это остальная часть строки после z =. Я использую регулярное выражение в .NetВозможно просто регулярное выражение

A 
x 
b 
x 
z=text#1 
A 
x 
c 
x 
z=text#2 
+0

Что должно произойти на A x c b z = текст # 2? или A x c A z = текст # 2? – Axarydax

ответ

2
.*c.*z=([^\n]*).* 

Вам необходимо включить . подходящих переноса строк (RegexOptions.SingleLine ниже).

Вот некоторые C# код, генерируемый My Regex Tester: (.) ​​

using System; 
using System.Text.RegularExpressions; 
namespace myapp 
{ 
    class Class1 
    { 
     static void Main(string[] args) 
     { 
      String sourcestring = "source string to match with pattern"; 
      Regex re = new Regex(@".*c.*z=([^\n]*).*",RegexOptions.Singleline); 
      MatchCollection mc = re.Matches(sourcestring); 
      int mIdx=0; 
      foreach (Match m in mc) 
      { 
      for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++) 
       { 
       Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value); 
       } 
      mIdx++; 
      } 
     } 
    } 
} 
1

c.+z=(.+)\n

Вы должны были бы установить регулярное выражение параметры так точка соответствует всем

2

Для того, чтобы захватить первыйz=whatever после c вам необходимо использовать неохотный квантификатор:

String source = @"A 
x 
b 
x 
z=text#1 
A 
x 
c 
x 
z=text#2 
A 
x 
d 
x 
z=text#3"; 

Match m = Regex.Match(source, @"c.*?z=([^\n]*)", RegexOptions.Singleline); 
if (m.Success) 
{ 
    Console.WriteLine(m.Groups[1].Value); 
} 

регулярных выражений, приведенные в других ответах захватить последнийz=whatever после c. Поскольку есть z=whatever после c, они получают ожидаемый результат случайно.

+0

Красиво пятнистый, спасибо! – Karsten

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