如何使用c#从字符串子串?

Jan*_*ngo 6 .net c# substring

字符串格式总是像这样"FirstName = ABC; LastName = XZY; Username = User1; Password = 1234".

我需要唯一的UserName值(在这种情况下是'User1').我希望使用substring方法(或其他方法)在最小代码行中实现此目的.

救命?

Mic*_*tum 15

为了完整起见,这是正则表达式的方法.如果订单发生变化,这也会有效.

// using System.Text.RegularExpressions;

string test1 = "FirstName=ABC;LastName=XZY;Username=User1;Password=1234";
string test2 = "FirstName=ABC;LastName=XZY;Password=1234;Username=User1";
string test3 = "FirstName=ABC;LastName=XZY;Password=1234";

string regexPattern = @"(?<=Username=)[^;\n]*";
var userName1 = Regex.Match(test1, regexPattern).Value; // User1
var userName2 = Regex.Match(test2, regexPattern).Value; // User1
var userName3 = Regex.Match(test3, regexPattern).Value; // string.Empty

// Compiling can speed up the Regex, at the expense of longer initial Initialization
// Use when this is called often, but measure.

Regex compiledRx = new Regex(regexPattern,RegexOptions.Compiled);
var userNameCompiled1 = compiledRx.Match(test1).Value; // User1
var userNameCompiled2 = compiledRx.Match(test2).Value; // User1
var userNameCompiled3 = compiledRx.Match(test3).Value; // string.Empty
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 12

看起来像一个分隔的字符串,所以这将工作:

string result = myString.Split(';')[2].Split('=')[1];
Run Code Online (Sandbox Code Playgroud)

但是,如果有人更改了值对顺序,则会中断.

有更好的方法,如果订单改变,参数的数量不同等也不会破坏 - 例如迈克尔发布的正则表达式,或许多人发布的Linq查询.

  • 我很欣赏你试图让它尽可能地缩短,但我认为我们最近看到的最丑陋的代码是胜利者.(没有违法行为!) (3认同)

Ins*_*ter 7

这是一个替代解决方案(与其他解决方案没有太大区别,但我认为更直接),无论顺序如何,它都能正常工作.

var input = "FirstName=ABC;LastName=XZY;Username=User1;Password=1234";

Assert.AreEqual("User1", input
    .Split(';')
    .Select(item => item.Split('='))
    .Where(pair => pair[0].Equals("Username"))
    .Single()[1]);
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 4

即使值对以不同的顺序给出,此方法也将起作用。它以分号为分隔符,查找包含“用户名”的项目,然后返回等号后面的内容。

string theString = "FirstName=ABC;LastName=XZY;Username=User1;Password=1234";
string username = theString.Split(";").Where(s => s.Split("=")[0].Equals("Username")).ToArray()[0].Split("=")[1];
Run Code Online (Sandbox Code Playgroud)