让我说,我讨厌使用字符串!我试图找到一种在括号上拆分字符串的方法。例如,字符串是:
Hello (this is) me!
然后,从此字符串中获取一个包含 Hello 和 me 的数组。我想用括号和括号(不带括号)来做这个。请注意,字符串是可变的,因此SubString
之类的东西不起作用。
提前致谢,
FWhite
答案 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
解释我使用的正则表达式(\(.*\)|{.*}
):
\(
只是(
,括号是Regex中的特殊符号,需要使用\
进行转义。.*
表示任何内容,即字面上的任何字符组合。|
是一个逻辑OR,因此表达式将匹配左侧或侧面。{
不需要转义,所以它就是原样。总的来说,您可以将其视为在括号或大括号内找到任何内容,然后代码将结果替换为空字符串,即删除所有出现的内容。这里有一个有趣的概念是理解greedy vs lazy matching。在这个特殊情况下,贪婪(默认)效果很好,但知道其他选项很好。
使用Regex的有用资源: