可能是简单的正则表达式搜索

时间:2011-01-25 08:40:14

标签: .net regex

查找文本#2的正则表达式是什么? 模式是它是c之后第一次出现“z =”。我想要的文字是z =之后的其余部分。我在.Net中使用正则表达式

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

3 个答案:

答案 0 :(得分:2)

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

您需要启用.个匹配换行符(RegexOptions.SingleLine以下)。

以下是My Regex Tester生成的一些C#代码:

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 :(得分: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之后的 last c。由于z=whatever之后只有一个c,因此无意中获得了预期结果。

答案 2 :(得分:1)

c.+z=(.+)\n

您必须设置正则表达式选项,以便点(。)匹配所有内容