我有一个文本文件,其中包含以下数据
[1] [apple] [market]
[2][toy]asdv[shop]sdvdsrdt
我只想要[]之间的数据。 []之外的人将被丢弃。 我试过了代码
string[] lines = textBox1.Text.Split("[");
foreach (string line in lines)
{
Console.WriteLine(line);
}
但它说我有一个char错误。我可以使用任何其他代码,因为当前代码只会丢弃该字符,因此不会仅从[]中提取数据。数据应该显示在我创建的几个文本框中。有人可以帮助我吗?
答案 0 :(得分:3)
您可以使用regex
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string s = "[1] [apple] [market]";
string s2 = "[2][toy]asdv[shop]sdvdsrdt";
foreach(Match m in Regex.Matches(s, @"\[(.*?)\]"))
{
Console.WriteLine(m.Groups[1]);
}
foreach (Match m in Regex.Matches(s2, @"\[(.*?)\]"))
{
Console.WriteLine(m.Groups[1]);
}
}
}
}
[OUTPUT]
1
apple
market
2
toy
shop
答案 1 :(得分:1)
作为使用正则表达式的替代方法,您可以使用Split()两次将部件作为IEnumerable获取,一次获取每个分隔字符串的开头,一次在每个结果字符串中的结束分隔符之后切断所有内容; < / p>
var str1 = "[2][toy]asdv[shop]sdvdsrdt";
str = str1.Split('[').Skip(1)
.Where(x => x.Contains(']'))
.Select(x => x.Split(']').First());
foreach (var s in str)
Console.WriteLine (s);
> 2
> toy
> shop
编辑:要从文件中执行此操作,您可以循环遍历File.ReadLines
;
foreach(var line in File.ReadLines("test.txt")) {
IEnumerable<string> str;
str = line.Split('[').Skip(1)
.Where(x => x.Contains(']')).Select(x => x.Split(']').First());
foreach (var s in str)
Console.WriteLine (s);
}
答案 2 :(得分:0)
string strLine = "[1] [apple] [market]";
string[] arr1 = strLine.Split('[');
foreach (string str in arr1)
{
string[] arr2 = str.Split(']');
Console.WriteLine(arr2[0]);
}