解析字符串以获得最终结果

时间:2013-12-05 19:17:42

标签: vb.net string-parsing

我正在尝试解析这个字符串'Smith,Joe M_16282'来获取逗号之前的所有内容,并结合下划线之后的所有内容。

结果字符串为:Smith16282

2 个答案:

答案 0 :(得分:1)

string longName = "Smith, Joe M_16282";

string shortName = longName.Substring(0, longName.IndexOf(",")) + longName.Substring(longName.LastIndexOf("_") + 1);

注意:

  • 第二个“substring”不需要长度参数,因为我们想要下划线之后的所有内容
  • 如果名称中出现其他下划线,例如“Smith_Jones,Joe M_16282”
  • ,则使用LastIndexOf代替IndexOf
  • 此代码假定字符串“longName”中至少有一个逗号和至少一个下划线。如果没有,代码将失败。如果你需要,我会把检查留给你。

答案 1 :(得分:0)

正如其他人所说,解析类似字符串的简单方法是使用String的各种解析方法,例如IndexOfSubString。如果您想要更强大和更灵活的东西,您可能还需要考虑使用RegEx替换。例如,你可以这样做:

Dim input As String = "Smith, Joe M_16282"
Dim pattern As String = "(.*?),.*?_(.*)"
Dim replacement As String = "$1$2"
Dim output As String = Regex.Replace(input, pattern, replacement)

或者更简单:

Dim output As String = Regex.Replace("Smith, Joe M_16282", "(.*?),.*?_(.*)", "$1$2")

以下是模式的含义:

  • (.*?) - 第一组捕获逗号前的所有字符
    • ( - 启动捕获组
    • . - 这是一个匹配任何字符的通配符
    • * - 指定前一个事物(任何字符)重复任意次数
    • ? - 指定*非贪婪,这意味着它不会匹配所有内容直到字符串结尾 - 它只会匹配,直到找到以下逗号
    • ) - 结束捕获组
  • , - 要查找的逗号
  • .*? - 说逗号和下划线之间会有任意数字,我们不关心
    • . - 任何角色
    • * - 任意次数
    • ? - 直到找到下划线
  • _ - 强调了
  • 的外观
  • (.*) - 第二组捕获下划线后的所有字符
    • ( - 启动捕获组
    • . - 任何角色
    • * - 任意次数
    • ) - 结束捕获组

以下是替换的含义:

  • $1 - 第一个捕获组中找到的所有字符的值
  • $2 - 第二个捕获组中找到的所有字符的值

RegEx对于您的特定情况可能过度,但它是一个非常方便的学习工具。一个主要优点是您可以将模式和替换值移动到app.config或其他地方的外部设置中。然后,您可以修改替换规则,而无需重新编译应用程序。