1

例如,我想从一个字符串中提取三个字符串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即儿子是姓氏

请检查一下:

  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);
}

真的会帮助某人

4

3 回答 3

4

只需使用string.Split

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

请注意,如果字符串不包含至少三个部分,这将引发异常。

于 2013-01-07T16:36:50.810 回答
1

使用 String.Split 方法。我还假设您也想摆脱这些空间?

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
于 2013-01-07T16:55:18.460 回答
1

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

但当然有一个学习曲线。但是一旦掌握了,就容易多了。所以这是替代方案:

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* - 因为 '*' 是一个特殊字符,我们必须对其进行转义。

希望这可以帮助。

BD

于 2013-01-07T17:03:28.993 回答