4

以下のコードがあります。角かっこ内に文字列を入れるにはどうすればよいですか?ありがとうございました。

Dim tmpStr() As String
    Dim strSplit() As String
    Dim strReal As String
    Dim i As Integer

    strWord = "hello (string1) there how (string2) are you?"

    strSplit = Split(strWord, "(")
    strReal = strSplit(LBound(strSplit))

    For i = 1 To UBound(strSplit)
        tmpStr = Split(strSplit(i), ")")
        strReal = strReal & tmpStr(UBound(tmpStr))
    Next
4

4 に答える 4

3

これが正規表現の目的です。それらを学び、それらを愛しなさい:

' Imports System.Text.RegularExpressions
Dim matches = Regex.Matches(input, "\(([^)]*)\)").Cast(of Match)()
Dim result = matches.Select(Function (x) x.Groups(1))

10を超える代わりに2行のコード。

Stephan Lavavejの言葉によると、「複雑な正規表現でさえ、同等のコードよりも理解と変更が容易です。」</ p>

于 2012-07-27T10:32:13.983 に答える
3
Dim src As String = "hello (string1) there how (string2) are you?"
Dim strs As New List(Of String)

Dim start As Integer = 0
Dim [end] As Integer = 0

While start < src.Length

    start = src.IndexOf("("c, start)
    If start <> -1 Then
        [end] = src.IndexOf(")"c, start)
        If [end] <> -1 Then
            Dim subStr As String = src.Substring(start + 1, [end] - start - 1)
            If Not subStr.StartsWith("(") Then strs.Add(src.Substring(start + 1, [end] - start - 1))
        End If
    Else
        Exit While
    End If

    start += 1 ' Increment start to skip to next (

End While

これでうまくいくはずです。

Dim result = Regex.Matches(src, "\(([^()]*)\)").Cast(Of Match)().Select(Function(x) x.Groups(1))

また、動作します。

于 2012-07-27T10:20:32.477 に答える
1
  1. String.IndexOfを使用して、最初の開きかっこ ( x ) の位置を取得します。

  2. IndexOf を再度使用して、最初の閉じ括弧 ( y ) の位置を取得します。

  3. String.Substringを使用して、 xおよびyからの位置に基づいてテキストを取得します。

  4. y +1までの文字列の先頭を削除します。

  5. 必要に応じてループ

それでうまくいくはずです。

于 2012-07-27T10:27:40.947 に答える
0

これもうまくいくかもしれません:

Dim myString As String = "Hello (FooBar) World"
Dim finalString As String = myString.Substring(myString.IndexOf("("), (myString.LastIndexOf(")") - myString.IndexOf("(")) + 1)

こちらも2行。

于 2012-07-27T10:26:46.663 に答える