在C#中,我有一个字符串来自这种格式的文件:
Type="Data"><Path.Style><Style
或者
Type="Program"><Rectangle.Style><Style
,等等。现在我想只提取Type元素的Data
或Program
部分。为此,我使用了以下代码:
string output;
var pair = inputKeyValue.Split('=');
if (pair[0] == "Type")
{
output = pair[1].Trim('"');
}
但它给了我这个结果:
output=Data><Path.Style><Style
我想要的是:
output=Data
怎么做?
答案 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"><Rectangle.Style><Style
在拆分"
时,包含引号(string
)似乎合乎逻辑......然后你只需要检测结束引号并减去内容。您可以使用LinQ
执行此操作:
string code = "Type=\"Program\"><Rectangle.Style><Style";
string[] parts = code.Split(new string[] { "=\"" }, StringSplitOptions.None);
string[] wantedParts = parts.Where(p => p.Contains("\"")).
Select(p => p.Substring(0, p.IndexOf("\""))).ToArray();