Сопоставление регулярных выражений — строк

#regex

#регулярное выражение

Вопрос:

У меня есть ввод, подобный:

 </name> rahul is nice guy <version=name> previous name is manoj </version> and cool </s>
  

Я использую регулярное выражение для

 re.search(r'(</name>([a-z0-9] )(?!<version>(.*?)</version>)([a-z0-9] )</s>)', line, re.M|re.I)
  

Мой вывод должен быть:

 rahul is nice guy and cool
  

Это не соответствует шаблону, и я пытаюсь опустить слова между тегами ‘version’, может кто-нибудь сказать мне, где я ошибаюсь??

Написано на python.

Ответ №1:

Этот шаблон соответствует:

 </name>([a-z0-9 ] )<version=name>(.*?)</version>([ a-z0-9] )</s>
  

Обратите внимание на пробелы, [a-z0-9 ] , и обратите внимание на символы, которые вы забыли =name .
Конечно, вы должны взять первое совпадение и третье совпадение.

Если это python — взять текст, но не текст внутри имени версии:

 Matches = re.findall(r'</name>([a-z0-9 ] )<version=name>(.*?)</version>([ a-z0-9] )</s>', line, re.M|re.I)
FinalText = Matches[0]   Matches[2]
  

Комментарии:

1. Как я упоминал в своей правке, вы должны объединить первое и третье совпадения, я привел пример на python, казалось, что это тот язык, который вы используете, в следующий раз, пожалуйста, укажите язык в вопросе. @пользователь3747896

Ответ №2:

Найдите соответствующую группу по индексу 1, используя приведенное ниже регулярное выражение:

 </name>[^<](.*?)s*<
  

Вот демонстрация регулярных выражений101, debuggex и regexr