Regex: пропустить / игнорировать шаблон - PullRequest
1 голос
/ 23 апреля 2010

Учитывая, что следующая строка встроена в текст, как я могу извлечь всю строку, но не совпадая по внутренним "<" и ">"?

<test type="yippie<innertext>" />

EDIT :
Чтобы быть более конкретным, нам нужно рассмотреть оба нижеприведенных варианта использования, в которых «type» имеет или не имеет символов «<» и «>».

<h:test type="yippie<innertext>" />
<h:test type="yippie">

Group 1: 'h:test'
Group 2: ' type="yippie<innertext>" '  -or-  ' type="yippie"'   (ie, remaining content before ">" or "/>")

Пока что у меня есть что-то подобное, но немного не так, как группа 2 останавливается на первом ">". Настройка первой части состояния группы 2.

(<([a-zA-Z0-9_:-]+)([^>"]*|[^>]*?)\s*(/)?>)

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Попробуйте это:

<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>

Пример использования (Python):

>>> x = '<h:test type="yippie<innertext>" />'
>>> re.search('<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>', x).groups()
('h:test', ' type="yippie<innertext>" ')

Также обратите внимание, что если ваш документ HTML или XML, то вам следует использовать анализатор HTML или XML вместо того, чтобы пытаться делать это с регулярными выражениями.

0 голосов
/ 23 апреля 2010

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

<test type="yippie<inner\"text\"_with_quotes,_literal_slash_and_quote\\\">" />

Кроме того, вам, вероятно, нужно экранировать внутренние < и > как &lt; и &gt;

По другим причинам, почему вы не должны анализировать XML с помощью регулярного выражения, я могу уступить только этому превосходному ответу:

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...