在长字符串中查找以[开始并以]结束的所有字符串部分

本文关键字:结束 字符串部 开始 字符串 查找 | 更新日期: 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上花费了太多的时间。