Заменить все подстроки в строке - PullRequest
0 голосов
/ 29 марта 2020

В Excel VBA, как заменить все подстроки xyz(*) в строке, которая содержит несколько экземпляров этой подстроки? * в xyz(*) означает каждую вещь между двумя скобками. Например, строка "COVID-19 xyz(aaa) affects xyz(bbbbbb) so much families." изменится на "COVID-19 affects so much families."

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Вы должны использовать регулярное выражение.
например:

Sub a()

Dim Regex As New RegExp
Dim SubjectString As String
SubjectString = "COVID-19 xyz(test) affects xyz(test) so much, families."
With Regex
  .Global = True
  .Pattern = "(\sxyz(\S*))"
End With
Dim ResultString As String
ResultString = Regex.Replace(SubjectString, "")
MsgBox (ResultString)
End Sub

первый \s, использованный для захвата 1 пробела перед xyz, поэтому при удалении замены, это не оставит 2 пробела. <br> затем ищем строку xyz и открывающую скобку, внутри нее я ищу \S, который является любым символом, а * означает 0 или более раз, а затем я ищу закрывающую скобку.

0 голосов
/ 30 марта 2020

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

Dim s As String
s = "COVID-19 xyz(aaa) affects xyz(bbbbbb) so much families."

Dim v As Variant
For Each v In Filter(Split(s, " "), "xyz(")
    s = Replace(s, v & " ", vbNullString)
Next

Я получил Filter() от этого поста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...