我有一个有趣的问题,我希望找到一个最好的解决方案,我已经尽力使用正则表达式。我想要的是使用正则表达式或任何其他方法使用C#从此字符串中查找所有col_x
值。
[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..."]
修改
我的尝试:
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);
}
但没有成功。
答案 0 :(得分:2)
尝试这样的事情:
string[] result = Regex.Matches(input, @"\[(col_\d+)\]").
Cast<Match>().
Select(x => x.Groups[1].Value).
ToArray();
答案 1 :(得分:2)
我认为这就是你所需要的:
string pattern = @"\[(col_\d+)\]";
MatchCollection matches = Regex.Matches(input, pattern);
string[] results = matches.Cast<Match>().Select(x => x.Groups[1].Value).ToArray();
用输入字符串替换输入。
我希望它有所帮助
答案 2 :(得分:1)
这有点hacky,但你可以做到这一点。
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();
假设在这种情况下有一个已知的max col_“x”我假设为100,它只是通过强力回复它们只返回它在文本中找到的那些。
如果你知道只有这么多的专栏要搜索,我会亲自试试这个而不是Regex,因为我在Regex上浪费了太多不好的经验。