Я нахожу мир регулярных выражений немного большим в данный момент и изо всех сил пытаюсь начать свой "захват". Не могли бы вы помочь мне на моем пути сюда? Я создаю своего рода поисковую систему, и мне нужно организовать строку ввода.

Учитывая VBA в качестве инструмента и RegEx, вероятно, лучший способ, рассмотрите следующую строку:

input = "header ++add this ++and;a --k101 --k102"

Где «пробел» должен стоять перед «++» или «-», но пользователь должен иметь возможность искать «разделенное слово»

В конце я хочу остаться с двумя массивами:
addArr = ["header", "add this", "and;a"]
remArr = ["k101","k102"]

До сих пор я думал, что сначала проверю "++", затем "-" и добавляю их по ходу работы

if instr(input,"++")>0 then 
    tmpArr =split(input,"++")
    for i = 1 to ubound(tmpArr) '0 is before the split, 1 is after the split 
       '''Do some regex here'''
    next i
end if

Возможно, я упускаю из виду более умный способ достижения конечного результата, но могу добавить, что ввод может отличаться от:
input = hey ++add this ++and;a (нет "-")
input = hey --remThis ++add this --remAlsoThis
и даже просто input = hey

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

Dim RE As Object, ptrn As String
Set RE = CreateObject("vbscript.regexp")
ptrn = "(?)(\+\+)" 'obviously wrong, but "working pattern"
With RE
    .Global = True
    .ignorecase = True
    .Pattern = ptrn
End With
output = RE.Replace(input, "$2")

И так заполните мои массивы. Но я изо всех сил пытаюсь понять правильный шаблон. Не могли бы вы помочь мне с образцом или направить меня по лучшему пути к моей цели?

Если это изменит решение, я не знаю, но я стремлюсь к двухмерному массиву, где второе измерение описывает, заканчивается ли слово / предложение символом "; a" (true или 1 ), который понадобится позже в моем коде ...

0
Doons 8 Фев 2021 в 22:44

1 ответ

Лучший ответ

Regex не подходил. Решил это путем разделения на пробелы и нескольких операций над каждым элементом в результирующем массиве.

0
Doons 18 Фев 2021 в 18:55