提取c#中的字符串部分

本文关键字:字符串部 提取 | 更新日期: 2023-09-27 17:57:40

我需要解析一列中的字符串记录,将其分解为两部分。我需要打破的记录的两个例子是:

  1. 第3.1.1行
  2. Qa.2.1

对于每个记录,我都要求最后一个"之前的所有内容以及最后一个"之后的所有内容例如,对于上面的#1,我需要:

代码=第3.1行
R值=1

我是c#的新手,已经尝试了以下操作,但没有得到想要的结果:

string ID = "Row.3.1.1;
int CodeIndex = ID.LastIndexOf(".");
string Code = ID.Substring(CodeIndex);
int ValueIndex = ID.IndexOf(".");
Rstring RValue = ID.Substring(ValueIndex);

提取c#中的字符串部分

试试这个方法:

class Program
    {
        static void Main(string[] args)
        {
            var firstTest = "Row.3.1.1";
            var secondTest = "Qa.2.1";
            Console.WriteLine(BuildFromString(firstTest));
            Console.WriteLine(BuildFromString(secondTest));
            Console.Read();
        }
        public static Extract BuildFromString(string input)
        {
            return new Extract
            {
                Code = input.Substring(0, input.LastIndexOf('.')),
                RValue = input.Substring(input.LastIndexOf('.'))
            };
        }
        public class Extract
        {
            public string Code { get; set; }
            public string RValue { get; set; }
            public override string ToString()
            {
                return $"Code: {Code} RValue:{RValue}";
            }
        }
    }

很努力,但你的指数有点偏离。

string ID = "Row.3.1.1";
int CodeIndex = ID.LastIndexOf(".");
//get the first half which is from index 0 (the start) to where the last `.` was found
string Code = ID.Substring(0, CodeIndex);
//start from where the last '.' and move up one because we 
//don't want to include the `.` in RValue
string RValue = ID.Substring(CodeIndex + 1); 

您可能希望包括错误处理等(例如,如果字符串中没有..会发生什么)。但是,假设您有一个完美的字符串,上面的代码应该可以工作。

您不需要两个索引操作。(如果我正确阅读了要求)

   string ID = "Row.3.1.1";
   int codeIndex = ID.LastIndexOf(".");
   string code = ID.Substring(0, codeIndex);
   string rValue = ID.Substring(codeIndex + 1);

您已接近:

string ID = "Row.3.1.1;
int CodeIndex = ID.LastIndexOf(".");
string Code = ID.Substring(CodeIndex);
// int ValueIndex = ID.IndexOf(".");
Rstring RValue = ID.Substring(0, CodeIndex); //Here, (0, CodeIndex)

没有子字符串和lastindexof的另一种可能性:

var IDParts = ID.Split('.');
var RValue = IDParts[IDParts.Length-1];
var Code = ID.TrimEnd("." + RValue);

对于任何答案中的所有解决方案,请注意,如果没有",它们会抛出异常,或者在我的情况下会产生错误的结果在你的身份证上,所以你应该加一张支票。

正则表达式使此操作变得简单。不需要索引或偏移量。

System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(.*)'.([^'.]*)$");
string testString= "Row.3.1.1";
System.Text.RegularExpressions.GroupCollection groups = regex.Match(testString).Groups;
System.Console.WriteLine("Code = " + groups[1]);
System.Console.WriteLine("RValue = " + groups[2]);

我认为这是您正在寻找的代码:

string ID = "Row.3.1.1";
int CodeIndex = ID.LastIndexOf(".");
string Code = ID.Substring(0, CodeIndex);
string RValue = ID.Substring(CodeIndex + 1);

参见.Net Fiddle代码

此外,您可能还想了解MSDN上的Substring函数。