#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