Вот готовый код для конструкции [ВыделенноеСлово](ПерваяХарактеристика :: ВтораяХарктеристика :: ТретьяХарактеристика :: ЧетвертаяХарактеристика]
Код
Function VzatIzSkobok()
Dim text As String, LeftRazdel As String, RightRazdel As String, Scepka As String, LeftRazdel1 As String, RightRazdel2 As String
Razdel = " :: " 'Внутренний разделитель
Scepka = ";" 'Если выделенных слов в тексте больше одного , они сцепляются через любой заданный символ
LeftRazdel = "]\(" 'Крайний левый разделитель
RightRazdel = "\)" 'Крайний правый разделитель
text = TextBox1.text 'Исходный текст, в данном случае берется из TextBox'a
With CreateObject("VBScript.regexp")
.Global = True
.Pattern = "(?:" & LeftRazdel & ")(.+?)(?:" & Razdel & ")(.+?)(?:" & Razdel & ")(.+?)(?:" & Razdel & ")(.+?)(?:" & RightRazdel & ")"
If .test(text) Then
For Each sM In .Execute(text)
ss = ss & Scepka & sM.SubMatches(0) ' Изменяя цифру в скобках можно выбрать положение того, что нужно вывести, в данном случае для ПервойХарактеристики будет 0, для Второй будет 1
Next
VzatIzSkobok = Mid(ss, Len(Scepka) + 1)
End If
End With
End Function
Behruz A.N., спасибо за вашу работу, но он немного не подходит, насколько я понял он работает, только если в тексте есть фиксированное число выделенных слов, но в моей ситуации их может быть сколько угодно, их может вообще не быть, а может быть и десять сразу.
Ігор Гончаренко, Простыми словами, есть текст, в котором выделены слова : Голос [сказал](glagol :: edinstvennii :: no_role :: no_group) , что он новый вид [жизни](sushestvitelnoe :: edinstvennii :: no_role :: no_group) таких слов может быть сколько угодно или они могут отсутствовать, около выделенных слов есть скобки с их характеристиками(принадлежность к группам) их 4 в каждой скобке и выделяются они всегда именно так, как в примере. Задача - вынести в 4 столбца каждые из этих характеристик по порядку. У меня ест рабочий код в верхнем сообщении, но корректно он это делает только для первой характеристики, т.к. символы по краям уникальные, а вот второй, третий и четвертый извлекаются некорректно. Задача написать паттерн с видом "любой текст](любой текст :: выносимый текст :: " для второго и "любой текст](любой текст :: любой текст :: выносимый текст :: " для третьго.
Доброго времени суток, прошу помощи в изменении патерна для регулярок.
В данный момент код выглядит вот так. Он забирает данные из текста и выводит в другую ячейку, проблема лишь в том , что делает он это некорректно.
Например: Голос [сказал](glagol :: edinstvennii :: no_role :: no_group) , что он новый вид [жизни](sushestvitelnoe :: edinstvennii :: no_role :: no_group) . По моей задумке он должен извлечь
Скрытый текст
glagol;sushestvitelnoe |
edinstvennii;edinstvennii |
no_role;no_role |
no_group;no_group
а извлекает
Скрытый текст
glagol;sushestvitelnoe
edinstvennii;no_group) , что он новый вид [жизни](sushestvitelnoe;no_role
edinstvennii;no_group) , что он новый вид [жизни](sushestvitelnoe;no_role
Прошу помощи в изменении патерна, заранее спасибо. Код прикладываю, так же как и файл для теста
Скрытый текст
Код
Function VzatIzSkobok()
Dim text As String, LeftRazdel As String, RightRazdel As String, Scepka As String, LeftRazdel1 As String, RightRazdel2 As String
LeftRazdel = "]\("
RightRazdel = " :: "
Scepka = ";"
text = TextBox1.text
With CreateObject("VBScript.regexp")
.Global = True
.Pattern = "(?:\" & LeftRazdel & ")(.+?)(?:\" & RightRazdel & ")"
If .Test(text) Then
For Each sM In .Execute(text)
ss = ss & Scepka & sM.SubMatches(0)
Next
VzatIzSkobok = Mid(ss, Len(Scepka) + 1)
End If
End With
End Function
Function VzatIzSkobok2()
Dim text As String, LeftRazdel As String, RightRazdel As String, Scepka As String, LeftRazdel1 As String, RightRazdel2 As String
LeftRazdel = " :: "
RightRazdel = " :: "
Scepka = ";"
text = TextBox1.text
LeftRazdel1 = "]("
RightRazdel2 = ")"
With CreateObject("VBScript.regexp")
.Global = True
.Pattern = "(?:" & LeftRazdel & ")(.+?)(?:" & RightRazdel & ")"
If .Test(text) Then
For Each sM In .Execute(text)
ss = ss & Scepka & sM.SubMatches(0)
Next
VzatIzSkobok2 = Mid(ss, Len(Scepka) + 1)
End If
End With
End Function
Function VzatIzSkobok3()
Dim text As String, LeftRazdel As String, RightRazdel As String, Scepka As String, LeftRazdel1 As String, RightRazdel2 As String
LeftRazdel = " :: "
RightRazdel = " :: "
Scepka = ";"
text = TextBox1.text
With CreateObject("VBScript.regexp")
.Global = True
.Pattern = "(?:" & LeftRazdel & ")(.+?)(?:" & RightRazdel & ")"
If .Test(text) Then
For Each sM In .Execute(text)
ss = ss & Scepka & sM.SubMatches(0)
Next
VzatIzSkobok3 = Mid(ss, Len(Scepka) + 1)
End If
End With
End Function
Function VzatIzSkobok4()
Dim text As String, LeftRazdel As String, RightRazdel As String, Scepka As String, LeftRazdel1 As String, RightRazdel2 As String
LeftRazdel = " :: "
RightRazdel = "\)"
Scepka = ";"
text = TextBox1.text
With CreateObject("VBScript.regexp")
.Global = True
.Pattern = "(?:" & LeftRazdel & ")(.+?)(?:" & RightRazdel & ")"
If .Test(text) Then
For Each sM In .Execute(text)
ss = ss & Scepka & sM.SubMatches(0)
Next
VzatIzSkobok4 = Mid(ss, Len(Scepka) + 1)
End If
End With
End Function