在括号和大括号上拆分字符串

时间:2014-11-13 13:29:20

标签: vb.net split

让我说,我讨厌使用字符串!我试图找到一种在括号上拆分字符串的方法。例如,字符串是:

Hello (this is) me!

然后,从此字符串中获取一个包含 Hello me 的数组。我想用括号和括号(不带括号)来做这个。请注意,字符串是可变的,因此SubString之类的东西不起作用。

提前致谢,

FWhite

3 个答案:

答案 0 :(得分:0)

试试这段代码:

    Dim var As String = "Hello ( me!"
    Dim arr() As String = var.Split("(")

    MsgBox(arr(0))      'Display Hello
    MsgBox(arr(1))      'Display me!

答案 1 :(得分:0)

这样的事情对你有用:

Dim x As String = "Hello (this is) me"
Dim firstString As String = x.Substring(0, x.IndexOf("("))
Dim secondString As String = x.Substring(x.IndexOf(")") + 1)
Dim finalString = firstString & secondString

x = "Hello (this is) me"

firstString = "Hello "

secondString = " me"

finalString = "Hello  me"

答案 2 :(得分:0)

您可以使用正则表达式(Regex),下面的代码应该排除所有括号和大括号内的文本,同时删除感叹号 - 随意扩展CleanUp方法以过滤掉其他标点符号:

Imports System.Text.RegularExpressions

Module Module1

  Sub Main()
    Dim re As New Regex("\(.*\)|{.*}") 'anything inside parenthesis OR braces
    Dim input As String = "Hello (this is) me and {that is} him!"
    Dim inputParsed As String = re.Replace(input, String.Empty)

    Dim reSplit As New Regex("\b") 'split by word boundary
    Dim output() As String = CleanUp(reSplit.Split(inputParsed))
    'output = {"Hello", "me", "and", "him"}
  End Sub

  Private Function CleanUp(output As String()) As String()
    Dim outputFiltered As New List(Of String)
    For Each v As String In output
      If String.IsNullOrWhiteSpace(v) Then Continue For 'remove spaces
      If v = "!" Then Continue For 'remove punctuation, feel free to expand
      outputFiltered.Add(v)
    Next
    Return outputFiltered.ToArray
  End Function

End Module

解释我使用的正则表达式(\(.*\)|{.*}):

  1. \(只是(,括号是Regex中的特殊符号,需要使用\进行转义。
  2. .*表示任何内容,即字面上的任何字符组合。
  3. |是一个逻辑OR,因此表达式将匹配左侧或侧面。
  4. {不需要转义,所以它就是原样。
  5. 总的来说,您可以将其视为在括号或大括号内找到任何内容,然后代码将结果替换为空字符串,即删除所有出现的内容。这里有一个有趣的概念是理解greedy vs lazy matching。在这个特殊情况下,贪婪(默认)效果很好,但知道其他选项很好。

    使用Regex的有用资源: