Страницы: 1
RSS
Помощь с патерном для регулярных функций
 
Доброго времени суток, прошу помощи в изменении патерна для регулярок.

В данный момент код выглядит вот так. Он забирает данные из текста и выводит в другую ячейку, проблема лишь в том , что делает он это некорректно.

Например: Голос [сказал](glagol :: edinstvennii :: no_role :: no_group) , что он новый вид [жизни](sushestvitelnoe :: edinstvennii :: no_role :: no_group) . По моей задумке он должен извлечь
Скрытый текст
а извлекает
Скрытый текст
Прошу помощи в изменении патерна, заранее спасибо.
Код прикладываю, так же как и файл для теста
Скрытый текст
Изменено: Саша Васильев - 03.07.2022 15:15:17
 
а без кодов, простыми словами обьяснить - никак?
и в примере нужно с десяток строк для понимания имеющегося зоопарка данных и требуемых результатов
или точное однозначное описание задачи
Изменено: Ігор Гончаренко - 03.07.2022 15:30:56
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Простыми словами, есть текст, в котором выделены слова : Голос [сказал](glagol :: edinstvennii :: no_role :: no_group) , что он новый вид [жизни](sushestvitelnoe :: edinstvennii :: no_role :: no_group) таких слов может быть сколько угодно или они могут отсутствовать,  около выделенных слов есть скобки с их характеристиками(принадлежность к группам) их 4 в каждой скобке и выделяются они всегда именно так, как в примере. Задача - вынести в 4 столбца каждые из этих характеристик по порядку. У меня ест  рабочий код в верхнем сообщении, но корректно он это делает только для первой характеристики, т.к. символы по краям уникальные, а вот второй, третий и четвертый извлекаются некорректно.  Задача написать паттерн с видом "любой текст](любой текст :: выносимый текст :: " для второго и "любой текст](любой текст :: любой текст :: выносимый текст :: " для третьго.
Изменено: Саша Васильев - 03.07.2022 16:53:00
 
Саша Васильев, Попробуйте так:
Вредить легко, помогать трудно.
 
Behruz A.N., спасибо за вашу работу, но он немного не подходит, насколько я понял он работает, только если в тексте есть фиксированное число выделенных слов, но в моей ситуации их может быть сколько угодно, их может вообще не быть, а может быть и десять сразу.
 
из всего сказанного я понял: есть задача, ее нужно решить
теперь не плохо бы узнать что за задача и как должно выглядеть решение
(код ваш не нужен, нужно понимать что из исходных должно оказаться в решении и как все должно выглядеть, на примере 5-10 строк с данными)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Саша Васильев, Так?
Вредить легко, помогать трудно.
 
\((.*?)\)

https://regex101.com/r/i1sMTp/1
Изменено: nilske - 04.07.2022 09:21:44
 
Всем спасибо за помощь, вопрос был решен.

Вот готовый код для конструкции [ВыделенноеСлово](ПерваяХарактеристика :: ВтораяХарктеристика :: ТретьяХарактеристика :: ЧетвертаяХарактеристика]
Код
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
Изменено: Саша Васильев - 04.07.2022 15:19:37
Страницы: 1
Наверх