Удалить текст, заключенный в квадратные скобки, из строки - PullRequest
0 голосов
/ 01 октября 2018

У меня есть записи, содержащие текст в квадратных скобках.

aaaaaa[aaaaa]

Мне нужно стереть этот текст, включая квадратные скобки.

Результат будет:

aaaaaa

Я пытаюсь этот код:

Dim sqr as Integer
Dim origin as String
Dim result as String

InStr(origin,[)

Я могу найти первую квадратную скобку, но она не выполняет свою работу.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Поскольку в своем вопросе вы заявляете, что хотите удалить текст в квадратных скобках (включая удаление скобок), я бы предложил следующее:

Function RemoveSqBracketText(strStr As String) As String
    Dim lngId1 As Long
    Dim lngId2 As Long
    lngId1 = InStr(strStr, "[")
    lngId2 = InStr(strStr, "]")
    If lngId1 > 0 And lngId2 > 0 Then
        RemoveSqBracketText = Left(strStr, lngId1 - 1) & RemoveSqBracketText(Mid(strStr, lngId2 + 1))
    Else
        RemoveSqBracketText = strStr
    End If
End Function

Это рекурсивно удалитвсе экземпляры текста заключены в квадратные скобки, и предполагается, что вы хотите удалить текст, только если он заключен в открывающую скобку и .

Примеры:

?RemoveSqBracketText("abc[123]")
abc

?RemoveSqBracketText("abc[123]def[ghi]")
abcdef

?RemoveSqBracketText("abc[123]defghi]")
abcdefghi]
0 голосов
/ 01 октября 2018

Вам нужно определить индекс открывающей квадратной скобки - InStr(origin, "[") (обратите внимание на двойные кавычки) - хорошее начало.

Теперь вы можете выполнить цикл от этого индекса до конца строкииспользуя функцию Mid$ для проверки символа по текущему индексу, пока не будет найдена закрывающая скобка:

Dim currentPosition As Long
currentPosition = InStr(origin, "[")
If currentPosition = 0 Then
    ' no opening bracket. now what?
Else
    Dim bracketedWord As String
    For currentPosition = currentPosition + 1 To Len(origin)
        If Mid$(origin, currentPosition, 1) <> "]" Then
            bracketedWord = bracketedWord & Mid$(origin, currentPosition, 1)
        Else
            'found the closing bracket: we're done.
            Exit For
        End If
    Next

End If

Или вы можете использовать InStr, чтобы найти открывающую скобку [ и позиции закрывающей скобки ], затем вычислите длину подстроки между этими двумя позициями и используйте функцию Mid$, чтобы вытянуть подстроку без зацикливания.

В качестве альтернативы, со ссылкой на Регулярные выражения Microsoft VBScript 5.5 вы можете использовать простое регулярное выражение:

Public Function FindBracketedWord(ByVal value As String) As String
    Dim regex As RegExp
    Set regex = new RegExp
    regex.Pattern = "\[(\w+)\]" ' matches a square-bracketed "word", no spaces

    Dim matches As MatchCollection
    Set matches = regex.Execute(value)

    If matches.Count <> 0 Then result = matches(0).SubMatches(0)
    FindBracketedWord = result
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...