gpt4 book ai didi

c# - 在格式化字符串中提取一些值

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:45 25 4
gpt4 key购买 nike

我想检索格式如下的字符串中的值:

public var any:int = 0;
public var anyId:Number = 2;
public var theEnd:Vector.<uint>;
public var test:Boolean = false;
public var others1:Vector.<int>;
public var firstValue:CustomType;
public var field2:Boolean = false;
public var secondValue:String = "";
public var isWorks:Boolean = false;

我想在自定义类属性中存储字段名称、类型和值:

public class Property
{
public string Name { get; set; }
public string Type { get; set; }
public string Value { get; set; }
}

然后使用 Regex 表达式获取这些值。

我该怎么做?

谢谢

编辑:我试过了,但我不知道如何进一步使用矢量等

    /public var ([a-zA-Z0-9]*):([a-zA-Z0-9]*)( = \"?([a-zA-Z0-9]*)\"?)?;/g

最佳答案

好的,发布我基于正则表达式的答案。

您的正则表达式 - /public var ([a-zA-Z0-9]*):([a-zA-Z0-9]*)( = \"?([a-zA-Z0-9]*)\"?)?;/g - 包含正则表达式定界符,它们在 C# 中不受支持,因此被视为文字符号。您需要删除它们和修饰符 g因为在 C# 中获得多个匹配 Regex.Matches , 或 Regex.MatchwhileMatch.Success/.NextMatch()可以使用。

我使用的正则表达式是 (?<=\s*var\s*)(?<name>[^=:\n]+):(?<type>[^;=\n]+)(?:=(?<value>[^;\n]+))? .包含换行符,因为否定字符类可以匹配换行符。

var str = "public var any:int = 0;\r\npublic var anyId:Number = 2;\r\npublic var theEnd:Vector.<uint>;\r\npublic var test:Boolean = false;\r\npublic var others1:Vector.<int>;\r\npublic var firstValue:CustomType;\r\npublic var field2:Boolean = false;\r\npublic var secondValue:String = \"\";\r\npublic var isWorks:Boolean = false;";
var rx = new Regex(@"(?<=\s*var\s*)(?<name>[^=:\n]+):(?<type>[^;=\n]+)(?:=(?<value>[^;\n]+))?");
var coll = rx.Matches(str);
var props = new List<Property>();
foreach (Match m in coll)
props.Add(new Property(m.Groups["name"].Value,m.Groups["type"].Value, m.Groups["value"].Value));
foreach (var item in props)
Console.WriteLine("Name = " + item.Name + ", Type = " + item.Type + ", Value = " + item.Value);

或者使用 LINQ:

var props = rx.Matches(str)
.OfType<Match>()
.Select(m =>
new Property(m.Groups["name"].Value,
m.Groups["type"].Value,
m.Groups["value"].Value))
.ToList();

类示例:

public class Property
{
public string Name { get; set; }
public string Type { get; set; }
public string Value { get; set; }
public Property()
{}
public Property(string n, string t, string v)
{
this.Name = n;
this.Type = t;
this.Value = v;
}
}

性能注意事项:

正则表达式不是最快的,但它肯定胜过另一个答案中的正则表达式。这是在 regexhero.net 执行的测试:

enter image description here

关于c# - 在格式化字符串中提取一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com