C# 在字符串中检索字符串的正则表达式
我有两条线:C# 在字符串中检索字符串的正则表达式,c#,regex,ini,C#,Regex,Ini,我有两条线: s = t [ f ] s = t 并使用此模式使用正则表达式处理每个: (?<=]).*(?==|:) (?与其使用正则表达式,为什么不使用正则.NET方法呢?请始终记住正则表达式不是万能的。只需几行代码的操作很快就会在正则表达式中变成一团混乱 您的案例可以通过以下功能解决: static string GetKey(string line) { string result = line.Split('=')[0]; if (result.Inde
s = t
[ f ] s = t
并使用此模式使用正则表达式处理每个:
(?<=]).*(?==|:)
(?与其使用正则表达式,为什么不使用正则.NET方法呢?请始终记住正则表达式不是万能的。只需几行代码的操作很快就会在正则表达式中变成一团混乱
您的案例可以通过以下功能解决:
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;
}
静态字符串GetKey(字符串行)
{
字符串结果=line.Split('=')[0];
if(result.IndexOf('[')
通过此函数运行代码可以成功检索每行上的s
。您可以使用正则表达式执行此任务。基本上,s
必须是介于]
或行/字符串的开头和=
符号之间的文本字符串
所以,使用
(?:^\p{Zs}*|])([^]=]*)=
见
正则表达式细分:
(?:^\p{Zs}*|])
-一个非捕获组匹配两个备选方案:
^\p{Zs}*
-字符串/行的开头(取决于使用的RegexOptions
),后跟0个或更多水平空白符号或
]
-文字符号
([^]=]*)
-(捕获组1)0个或多个不是]
或=
的符号
=
-文字符号=
:
以下是您试图解决的问题是什么?一个简单的例子并不能解决它。如果您的目标是解析ini文件,那么在开始和结束时是否有额外的一点需要去掉“]和“=”,我意识到我可以在这一点上进行子串,只是想知道。但是您在组[1]中没有得到它们.Value
。如果需要将s
作为匹配.Value
,可以使用效率低得多的var pattern=@”(?我使用的是.Value,但它也会得到]和=,我不介意子字符串,=号是冒号还是等号?您需要的值可以通过访问match.Groups[1]获得.Value
对于我的原始答案,可能是因为捕获组(圆括号)在将匹配子字符串的一部分捕获到一个单独缓冲区的模式中。在查找无效的情况下使用捕获组是最佳做法。但是我之前的评论中的正则表达式应该对您很有用,即使使用match.Value
。它起作用了!您的答案很好,尽管我有意保持一致因为我自己的原因,它降到了最低,所以我想使用正则表达式。
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);
}
@"(?<=^\p{Zs}*|])[^]=:]*(?=[=:])"