正则表达式检索字符串中的字符串

时间:2015-12-01 07:29:11

标签: c# regex ini

我有这两个字符串:

 s = t 
 [ f ] s = t

使用此模式处理每个正则表达式:

(?<=]).*(?==|:)

我的目标是尝试检索" s " part (between the "]" and "=")"[ f ]" is optional,正如您在第一行中看到的那样。

我尝试过在线发现并被其他人使用的许多不同模式,过去2小时也试图用引用,搜索引擎,反复试验来解决这个问题,但没有成功。

我将如何实现这一目标?我需要采用什么模式来实现这一目标?

2 个答案:

答案 0 :(得分:1)

为什么不使用常规的.NET方法,而不是使用RegEx?永远记住正则表达式不是银子弹。需要几行代码的操作很快就会成为RegEx中令人费解的混乱。

您的案例可以通过以下功能解决:

static string GetKey(string line)
{
    string result = line.Split('=')[0];
    if (result.IndexOf('[') < result.IndexOf(']')) // preceded by an optional group
        result = result.Split(']')[1];

    return result;
}

通过此函数运行代码会成功检索每一行的s

答案 1 :(得分:1)

您可以使用正则表达式执行此任务。基本上,s必须是]或行/字符串开头和=符号之间的一些文字字符串。

所以,使用

(?:^\p{Zs}*|])([^]=]*)=

请参阅regex demo

正则表达式分解:

  • (?:^\p{Zs}*|]) - 一个匹配2个备选方案的非捕获组:
    • ^\p{Zs}* - 字符串/行的开头(取决于使用的RegexOptions),后跟0个或更多水平空白符号或......
    • ] - 文字]符号
  • ([^]=]*) - (捕获组1)0个或更多不是]=的符号。
  • = - 文字=符号

C# Code

var strs = new List<string> { " [ f ] s = t", "s = t"};
var pattern = @"(?:^\p{Zs}*|])([^]=]*)=";
foreach (var s in strs)
{
    var match = Regex.Match(s, pattern);
    if (match.Success)
        Console.WriteLine(match.Groups[1].Value);
   }

如果您需要通过Match.Value获取所需的值,则可以使用

@"(?<=^\p{Zs}*|])[^]=:]*(?=[=:])"

以下是regex demo