我正在尝试解析这个字符串'Smith,Joe M_16282'来获取逗号之前的所有内容,并结合下划线之后的所有内容。
结果字符串为:Smith16282
答案 0 :(得分:1)
string longName = "Smith, Joe M_16282";
string shortName = longName.Substring(0, longName.IndexOf(",")) + longName.Substring(longName.LastIndexOf("_") + 1);
注意:
答案 1 :(得分:0)
正如其他人所说,解析类似字符串的简单方法是使用String
的各种解析方法,例如IndexOf
和SubString
。如果您想要更强大和更灵活的东西,您可能还需要考虑使用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或其他地方的外部设置中。然后,您可以修改替换规则,而无需重新编译应用程序。