如何在c#中拆分特定格式的字符串并将其分配给变量?

安娜

我对 C# 很陌生,需要一些关于如何解决以下问题的建议。

我有以下内容。

string input = "{1, 'hello', 1, 3}, {2, 'othello', 0, 2}"

在某些情况下,{}输入字符串中可能只有一个或多个。

我希望能够将输入字符串拆分为两个或多个,{}并创建类 Data 的实例并将每个新实例添加到List<Data> mydatalist().

我有以下 Data 类的声明。我不确定如何拆分输入字符串并从中创建 Data 类实例。

public partial class Data
{
    private:
    int id;
    string desc;
    int state;
    int res;

    public:
    Data(int idval, string indesc, int instate, int inres)
    {
        id=idval; desc=indesc; state=instate; res=inres; 
    }
}

最后,我List<Data> mydatalist()将包含两个Data类对象,并相应地声明了各自的字段。

void CreateInstances(string result)
{
   var temp = result.Split(); // This gives me every index?
}

任何帮助将不胜感激。

  • 对重复{ <number>, <string>, <number>, <number> }部分使用正则表达式
  • 我强烈建议使用不可变的 POCO 而不是像您的代码那样使用可变类型。
  • 您说您是 C# 新手,但我不知道您是否不熟悉正则表达式和体裁解析,但正则表达式“匹配”您的输入文本并允许程序从中提取数据。将其视为"foo*.txt"您可能已经见过的更强大的通配符或全局搜索形式
    • (\d+) 意思是“匹配十进制数字”
    • \s* 意思是“在这里期待可选的空格”
    • '(.*?)' 意思是“将两个引号之间的每个字符读为一个值”
    • 您可以在这里在线试用:https : //regex101.com/r/mesMGG/1
  • Match.NextMatch()方法和Match.Successful属性允许相同的正则表达式到超过一个输入字符串多次运行。
  • 匹配的文本作为 中的String返回Match.Groups[]
    • 请注意,Match.Groups[0]始终是整个输入字符串,这就是为什么我的代码从 index1而不是0.
    • 因为它们是String值,所以您需要使用它们Int32.ParseInt32.TryParse将它们转换为Int32值。

像这样:

class Data
{

    public Data( Int32 id, String description, Int32 state, Int32 res )
    {
        this.Id = id;
        this.Description = description;
        this.State = state;
        this.Res = res;
    }

    public Int32 Id { get; }
    public String Description { get; }
    public Int32 State { get; }
    public Int32 Res { get; }
}

public static List<Data> ParseData( String input )
{
    RegEx r = new Regex( @"\{\s*(\d+)\s*,\s*'(.*?)'\s*,\s*(\d+)\s*,\s*(\d+)\s*\}" );

    List<Data> list = new List<Data>();

    Match m = r.Match( input );
    while( m.Success )
    {
        Int32  id    = Int32.Parse( m.Groups[1].Value, NumberStyles.Integer, CultureInfo.InvariantCulture );
        String desc  = m.Groups[2].Value;
        Int32  state = Int32.Parse( m.Groups[3].Value, NumberStyles.Integer, CultureInfo.InvariantCulture );
        Int32  res   = Int32.Parse( m.Groups[4].Value, NumberStyles.Integer, CultureInfo.InvariantCulture );

        Data d = new Data( id, desc, state, res );
        list.Add( d );

        m = m.NextMatch();
    }

    return list;
}

像这样使用:

List<Data> list = ParseData( "{1, 'hello', 1, 3}, {2, 'othello', 0, 2}" );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何分割字符串并将其分配给变量

如何获取数组中的所有内容并将其分配给变量,并在它们之间使用空格作为字符串

如何从数组中选择随机字符串并将其分配给变量?

拆分字符串值并将其分配给VBscript中的变量

如何在字符串中搜索特定格式?

从字符串中提取关键字并将其分配给C#中的属性

从字符串中提取项目并将其分配给变量

mysql如何查找当前数据库,将其分配给字符串变量

如何在C中将字符串分配给变量

如何验证字符串并将其转换为特定格式的python

拆分字符串,将其解析为int并分配给其他变量

如何从字符串中提取单词并将其分配给Python 3.7中的变量?

选择并将列表框的特定行分配给变量作为字符串

如何检查来自URL的字符串值是否存在于Enum中并将其值分配给变量?

在Kotlin中,如何从字符串中获取一个类并将其分配给具有超类类型的变量?

如何将变量分配给具有特定索引的拆分字符串?

返回字符串数组并将其分配给C中的变量

如何拆分字符串并将其分配给python中的新列

从Perl中的字符串中提取匹配的正则表达式模式并将其分配给变量

分割字符串并将其分配给字典

如何从数组中查找字符串并将其分配给c#asp.net中的字符串

从字符串中获取每个字符并将其分配给新字符串

如何拆分字符串并将其存储在变量中?

C。从文件中扫描行的特定部分,并将其分配给某个变量

如何将数组中的字符串分配给 C 中的变量(来自函数)?

如何在C中检查字符串的特定格式

如何从文本中删除子字符串并将嵌套子字符串分配给变量?

如何使用正则表达式拆分多个字符串格式并将其不同的组分配给变量

拆分字符串并将它们分配给变量