Как я могу извлечь текст, который не находится между двойными кавычками ("")? в превосходстве - PullRequest
0 голосов
/ 16 мая 2019

У меня есть столбец, в котором есть такие строки: -

  1. RM125 | RM250 | RMX250 | "RM 125" | "RM 250" |"RMX 250"

  2. DR250 | DR350 | "DR 250" | "DR 350" | DR250S | DR250SE | DR350S | "DR250 S" | "DR250 SE" | "DR350 S"

  3. RMZ250 | "RMZ 250" | "RM-Z 250" | "RMZ-250"

теперь я хочу извлечь только текст, который не находится в двойных кавычках ("")

например:

  1. RM125 | RM250 | RMX250
  2. DR250 | DR350 | DR250S | DR250SE | DR350S

1 Ответ

1 голос
/ 17 мая 2019

РЕДАКТИРОВАТЬ Спасибо @PEH за указание на то, что мое регулярное выражение не исключало бы подстроки в кавычках, если бы они находились в первом месте (и поэтому им не предшествовал |).Мы должны сделать специальный случай для начальной подстроки в кавычках, изменив:

.Pattern = "^""[^""]+""\s*\||\|\s*""[^""]+""\s*"

, и я сделал это в приведенном ниже коде.

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

Function delQuotedStrings(S As String) As String
    With CreateObject("vbscript.regexp")
        .Pattern = "^""[^""]+""\s*\||\|\s*""[^""]+""\s*" ' changed from "\|\s*""[^""]+""\s*"
        .Global = True
        delQuotedStrings = .Replace(S, "")
    End With
End Function

напр.Данные в A1:

B1: =delQuotedStrings(A1)

ИЛИ можно использовать решение не-Regex:

Option Explicit
Function delQuotedStrings(S As String) As String
    Dim v, w, col As Collection, i As Long
Set col = New Collection
For Each v In Split(S, "|")
    If Not Left(Trim(v), 1) = """" Then _
        col.Add v
Next v

ReDim w(1 To col.Count)
For i = 1 To col.Count
    w(i) = col(i)
Next i

delQuotedStrings = Join(w, "|")

End Function

enter image description here

Объяснение регулярного выражения:

удалить цитируемые подстроки

\|\s*"[^"]+"\s*

Создано с помощью RegexBuddy

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