在长字符串中查找以[开始并以]结束的所有字符串部分
本文关键字:结束 字符串部 开始 字符串 查找 | 更新日期: 2023-09-27 18:15:27
我有一个有趣的问题,我想找到一个最好的解决方案,我已经尽我最大的努力与regex。我想要的是找到所有的col_x
值从这个字符串使用c#使用正则表达式或任何其他方法。
[col_5] is a central heating boiler manufacturer produce boilers under [col_6]
brand name . Your selected [col_7] model name is a [col_6] [col_15] boiler.
[col_6] [col_15] boiler [col_7] model [col_10] came in production untill
[col_11]. [col_6] model product index number is [col_1] given by SEDBUK
'Seasonal Efficiency of a Domestic Boiler in the UK'. [col_6] model have
qualifier [col_8] and GCN [col_9] 'Boiler Gas Council No'. [col_7] model
source of heat for a boiler combustion is a [col_12].
期望的输出是一个数组
var data =["col_5","col_10","etc..."]
编辑
my attempt:
string text = "[col_1]cc[col_2]asdfsd[col_3]";
var matches = Regex.Matches(text, @"[[^@]*]");
var uniques = matches.Cast<Match>().Select(match => match.Value).ToList().Distinct();
foreach(string m in uniques)
{
Console.WriteLine(m);
}
试试这样:
string[] result = Regex.Matches(input, @"'[(col_'d+)']").
Cast<Match>().
Select(x => x.Groups[1].Value).
ToArray();
我认为这就是你需要的:
string pattern = @"'[(col_'d+)']";
MatchCollection matches = Regex.Matches(input, pattern);
string[] results = matches.Cast<Match>().Select(x => x.Groups[1].Value).ToArray();
将输入替换为您的输入字符串。
希望能有所帮助
这有点粗糙,但你可以这样做。
var myMessage =@"[col_5] is a central heating boiler..."; //etc.
var values = Enumerable.Range(1, 100)
.Select(x => "[col_" + x + "]")
.Where(x => myMessage.Contains(x))
.ToList();
假设有一个已知的最大col_"x"在这个例子中我假设是100,它只是通过暴力破解来尝试它们,只返回它在文本中找到的那些。
如果你知道只有这么多列要搜索,我个人会尝试这个而不是Regex,因为我在Regex上花费了太多的时间。