我有一个名为hello.txt
的文本文件,其中包含以下文字:
[你好]这是堆栈溢出,我很喜欢[THIS]。我用[Stack] 寻求帮助。
我只想在列表框中添加[ ]
(括号字符串)。
我试过了:
using (StringReader reader = new StringReader(File Location))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string input = line;
string output = input.Split('[', ']')[1];
MessageBox.Show(output);
}
}
但这对我不起作用。
答案 0 :(得分:3)
这就是你要找的东西
string a = "Someone is [here]";
string b = Regex.Match(a, @"\[.*?\]").Groups[0].Value;
Console.WriteLine(b);
//or if you need all occurences
foreach(Match match in Regex.Matches(a, @"\[.*?\]"))
{
Console.WriteLine(match.Groups[0].Value);
}
答案 1 :(得分:1)
您可以使用正则表达式,如:
var pattern = @"\[[^\]]*]";
while ((line = reader.ReadLine()) != null) {
var matches = Regex.Matches(line, pattern);
foreach (var m in matches) {
MessageBox.Show(m);
}
}
此模式在方括号之间查找不是右方括号的任何内容。
如果您希望括号之间没有括号本身,可以修剪每个匹配的括号:
MessageBox.Show(m.Value.Substring(1, m.Value.Length - 2));
或者您可以使用此模式:
var pattern = @"\[([^\]]*)]";
while ((line = reader.ReadLine()) != null) {
var matches = Regex.Matches(line, pattern);
foreach (Match m in matches) {
MessageBox.Show(m.Groups[1]);
}
}
答案 2 :(得分:1)
您可以为此创建一个函数,它接受三个参数的第一个输入字符串,起始字符串和结束字符串以及返回这两个字符串之间的值列表
private static IEnumerable<string> GetListOfString(string input, string start, string end)
{
var regex = new Regex(Regex.Escape(start) + "(.*?)" + Regex.Escape(end));
var matches = regex.Matches(input);
return (from object match in matches select match.ToString()).ToList();
}
答案 3 :(得分:0)
这是使用LINQ
执行此操作的另一种方法string[] text = "[Hello] this is stack overflow and I Love [THIS] a lot. I use [Stack] for help.".Split(' ');
var wantedString = text.Where(s => s.StartsWith("[") && s.EndsWith("]"));
foreach(string word in wantedString)
{
Console.WriteLine(word);
}