Regex正在字符串中检索字符串
本文关键字:字符串 检索 Regex | 更新日期: 2023-09-27 18:25:13
我有这两个字符串:
s = t
[ f ] s = t
并使用以下模式用正则表达式处理每个正则表达式:
(?<=]).*(?==|:)
我的目标是尝试检索" s " part (between the "]" and "=")
,而不是"[ f ]" is optional
,正如您在第一行中看到的那样。
我尝试了许多不同的模式,在网上找到并被其他人使用,在过去的两个小时里,我也试图通过参考资料、搜索引擎、试错来解决这个问题,但没有成功。
我将如何实现这一点?我需要什么样的模式才能做到这一点?
您可以为此任务使用正则表达式。基本上,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
。