Nano Hash - криптовалюты, майнинг, программирование

регулярное выражение vbscript, замена между двумя строками

У меня есть этот xml:

<doc>
<ContactPrimaryEmail></ContactPrimaryEmail>
<ContactAlternateEmail></ContactAlternateEmail> 
<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>
<ContactAlternateMobile></ContactAlternateMobile> 
</doc>

Я хочу применить регулярное выражение в VBScript для замены content "+00xxxxxx" атрибута ContactPrimaryMobile, просто измените номер:

<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>

Я новичок в vbscripting, и мои навыки в создании объектов и применении шаблона ограничены, поэтому, пожалуйста, помогите мне преобразовать это регулярное выражение для использования в VBScript:

(?<=\<ContactPrimaryMobile\>)(.*)(?=\<\/ContactPrimaryMobile)

ОБНОВЛЕНИЕ Я получаю это:

Объект не поддерживает это свойство или метод: «Подсовпадения».

при выполнении:

Dim oRE, oMatches
Set oRE = New RegExp
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"
oRE.Global = True
Set oMatches = oRE.Execute("<doc><ContactPrimaryEmail></ContactPrimaryEmail><ContactAlternateEmail></ContactAlternateEmail><ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile><ContactAlternateMobile></ContactAlternateMobile></doc>")
Wscript.Echo oMatches.Submatches(0)

  • Используйте <ContactPrimaryMobile>(.*?)</ContactPrimaryMobile> и получите значение match.Submatches(0). Покажите свой код, если вам нужна более конкретная помощь. 14.09.2018
  • Я получаю, что этот объект не поддерживает это свойство или метод: «Подсовпадения» при выполнении: Dim oRE, oMatches Set oRE = New RegExp oRE.Pattern = ‹ContactPrimaryMobile›(.*?)‹/ContactPrimaryMobile› oRE.Global = True Set oMatches = oRE.Execute(‹doc›‹ContactPrimaryEmail›‹/ContactPrimaryEmail›‹ContactAlternateEmail›‹/ContactAlternateEmail›‹ContactPrimaryMobile›+00xxxxxx‹/ContactPrimaryMobile›‹ContactAlternateMobile›‹/ContactAlternateMobile›‹‹ (0) Любая дополнительная помощь? 14.09.2018
  • Пожалуйста, добавьте это в тело вопроса. Почему вы пытаетесь получить подсовпадения в коллекции матчей? Доступ к первому элементу. Wscript.Echo oMatches(0).Submatches(0) 14.09.2018
  • Большое спасибо за ваш ответ! 14.09.2018
  • Не только один, но мне действительно нужно заменить номер в xml новым. 14.09.2018

Ответы:


1

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

Затем вам нужно получить подсоответствие, обратившись к объекту соответствия после того, как вы .Execute соответствуете регулярному выражению, и получите его .Submatches(0):

Dim oRE, oMatches, objMatch
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"

а потом

Set oMatches = oRE.Execute(s)
For Each objMatch In oMatches
  Wscript.Echo objMatch.Submatches(0)
Next

Для замены используйте соответствующие группировки и метод:

oRE.Pattern = "(<ContactPrimaryMobile>).*?(</ContactPrimaryMobile>)"
' and then
s = oRE.Replace(s,"$1SOME_NEW_VALUE$2")
14.09.2018
  • Красиво, я понял! Теперь, как я могу обновить число в строке? 14.09.2018

  • 2

    Я знаю, что вы явно сказали regex, и у вас есть ответ но альтернативный подход к достижению той же конечной цели состоит в том, чтобы вместо этого использовать синтаксический анализатор XML.

    option explicit
    
    dim xmldoc
    set xmldoc = CreateObject("MSXML2.DomDocument")
    xmldoc.load "doc.xml"
    dim primaryMobileNode
    set primaryMobileNode = xmldoc.selectSingleNode("/doc/ContactPrimaryMobile")
    primaryMobileNode.text = "new value"
    xmldoc.save "changed-doc.xml"
    
    14.09.2018
  • Спасибо за ответ. хорошая мысль, я тоже так думал. Но я не читаю xml из файла. Он поступает из базы данных как объект adodb. Я думал, что будет быстрее использовать регулярное выражение 15.09.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..