Regex正在字符串中检索字符串

本文关键字:字符串 检索 Regex | 更新日期: 2023-09-27 18:25:13

我有这两个字符串:

 s = t 
 [ f ] s = t

并使用以下模式用正则表达式处理每个正则表达式:

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

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

我尝试了许多不同的模式,在网上找到并被其他人使用,在过去的两个小时里,我也试图通过参考资料、搜索引擎、试错来解决这个问题,但没有成功。

我将如何实现这一点?我需要什么样的模式才能做到这一点?

Regex正在字符串中检索字符串

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

所以,使用

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

查看regex演示

正则表达式分解:

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

C#代码:

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演示

与其使用RegEx,为什么不使用常规的.NET方法呢?请始终记住,正则表达式不是银弹。在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