在c#中选择连字符之前和星号之后的特定字符串

本文关键字:之后 字符串 选择 连字符 | 更新日期: 2023-09-27 17:50:52

我想从字符串中取出三个字符串,例如Vks - Vks * Son

 txtName.Text = objDoctor.DocName.Substring(0, objDoctor.DocName.IndexOf("-")).Trim();

我已成功获得第一部分,即

txtMidName.Text = objDoctor.DocName.Substring(1, objDoctor.DocName.IndexOf("-")).Trim();
 txtLastName.Text = objDoctor.DocName.Substring(0,objDoctor.DocName.LastIndexOf("*")).Trim();

注意:Vks - Vks * Son的第二部分是MidName,第三部分是Son is The Last Name

一定要看看这个:

  Name = Name.Trim();
arrNames = Name.Split(' ', '-' , '*');
if (arrNames.Length > 0) {
    GivenName = arrNames[0];
}
if (arrNames.Length > 1) {
    FamilyName = arrNames[arrNames.Length - 1];
}
if (arrNames.Length > 2) {
    MiddleName = string.Join(" ", arrNames, 1, arrNames.Length - 2);
}

真的会帮助别人

在c#中选择连字符之前和星号之后的特定字符串

直接使用string.Split:

var parts = objDoctor.DocName.Split('-', '*');
txtName.Text = parts[0];
txtMidName.Text = parts[1];
txtLastName.Text = parts[2];

请注意,如果字符串不包含至少三个部分,则会抛出异常。

使用字符串。分割方法。我还假设你想把空格也去掉?

String data = "Vks - Vks * Son";
String[] pieces = (from piece in data.Split(new char[]{'-', '*'}, StringSplitOptions.RemoveEmptyEntries)
                                select piece.Trim()).ToArray();
Console.WriteLine(pieces[0]);
Console.WriteLine(pieces[1]);
Console.WriteLine(pieces[2]);

所以我使用了一点LINQ来帮助在字符串被分割后修剪掉它们之间的空格。

这将在命令行上给出以下结果:

Vks
Vks
Son

我会使用正则表达式来解析这样的字符串。

但是当然有一个学习曲线。但一旦掌握了,就容易多了。这里是另一个选项:

string parse = "Vks - Vks * Son";
string pattern = @"(?'first''w*)'s*-'s*(?'second''w*)'s*'*'s*(?'last''w*)";
Match m = Regex.Match(parse, pattern);
if (m.Success)
{
   Console.WriteLine(m.Groups["first"].Value);
   Console.WriteLine(m.Groups["second"].Value);
   Console.WriteLine(m.Groups["last"].Value);
}

模式的快速解释:

我们将字符串分成3部分:第一,第二和最后。

一个单词(0个或多个字符)是'w* -如果至少需要一个字符,则使用'w+

's*-'s*是空格(0个或多个空白字符),后面跟着'-',然后是空格(还是0个或多个空白字符)。

's*'*'s* -因为'*'是一个特殊字符,我们必须对它进行转义。

希望对你有帮助。

双相障碍