省略字符串数组中不必要的部分

时间:2014-07-21 12:54:25

标签: c# string split

在C#中,我有一个字符串来自这种格式的文件:

Type="Data"><Path.Style><Style

或者

Type="Program"><Rectangle.Style><Style

,等等。现在我想只提取Type元素的DataProgram部分。为此,我使用了以下代码:

string output;

var pair = inputKeyValue.Split('=');

if (pair[0] == "Type")
{
    output = pair[1].Trim('"');
}

但它给了我这个结果:

output=Data><Path.Style><Style

我想要的是:

output=Data

怎么做?

6 个答案:

答案 0 :(得分:1)

你可以做的是使用一个非常简单的常规快递来解析你想要的位,如果你想要这样的东西,然后抓住你感兴趣的两个小组:

(Type)="(\w+)"

哪个会在第1组和第2组中返回值Type和双引号之间包含的非空格字符。

答案 1 :(得分:1)

此代码示例采用输入字符串,按双引号分割,仅获取前2个项目,然后将它们连接在一起以创建最终字符串。

string input = "Type=\"Data\"><Path.Style><Style";

var parts = input
    .Split('"')
    .Take(2);

string output = string.Join("", parts); //note: .net 4 or higher

这将使output具有值:

  

类型=数据

如果您只想让output成为“数据”,请执行

var parts = input
    .Split('"')
    .Skip(1)
    .Take(1);

var output = input
    .Split('"')[1];

答案 2 :(得分:1)

为什么不使用Regex

,而不是进行多次拆分
 output = Regex.Match(pair[1].Trim('"'), "\"(\w*)\"").Value;

答案 3 :(得分:1)

也许我错过了什么,但是这个怎么样:

var str = "Type=\"Program\"><Rectangle.Style><Style";
var splitted = str.Split('"');
var type = splitted[1]; // IE Data or Progam

但是你也需要一些错误处理。

答案 4 :(得分:1)

正则表达式怎么样?

var regex = new Regex("(?<=^Type=\").*?(?=\")");
var output = regex.Match(input).Value;

正则表达式的解释

  • (?<=^Type=\")这是一个前缀匹配。它不包含在结果中但只会匹配               如果字符串以Type =“

  • 开头
  • .*?非贪婪的比赛。匹配尽可能多的字符,直到

  • (?=\")这是后缀匹配。它不包含在结果中,但仅在下一个字符为“

  • 时才匹配

答案 5 :(得分:1)

根据您指定的格式:

Type="Program"&gt;&lt;Rectangle.Style&gt;&lt;Style

在拆分"时,包含引号(string)似乎合乎逻辑......然后你只需要检测结束引号并减去内容。您可以使用LinQ执行此操作:

string code = "Type=\"Program\"&gt;&lt;Rectangle.Style&gt;&lt;Style";
string[] parts = code.Split(new string[] { "=\"" }, StringSplitOptions.None);
string[] wantedParts = parts.Where(p => p.Contains("\"")).
    Select(p => p.Substring(0, p.IndexOf("\""))).ToArray();