объединяя захваты в регулярных выражениях - PullRequest
1 голос
/ 26 февраля 2010
some text I want to capture. <tag> junk I don't care about</tag> more stuff I want.

Есть ли простой способ написать регулярное выражение, которое захватывает первое и третье предложения в одном захвате?

Ответы [ 5 ]

1 голос
/ 26 февраля 2010

Вы также можете удалить ненужные данные и затем захватить.

data = "some text to capture. <tag>junk</tag> other stuff to capture".
data = re.replace('<tag>[^<]*</tag>', data, "")
data_match = re.match('[\w\. ]+', data)
0 голосов
/ 26 февраля 2010

это не регулярное выражение, разделить на </tag>, просмотреть элементы массива, найти <tag>, затем разделить на <tag> и получить первый элемент. например,

>>> s="some text I want to capture. <tag> junk I don't care about</tag> more stuff I want. <tag> don't care </tag> i care"
>>> for item in s.split("</tag>"):
...     if "<tag>" in item:
...        print item.split("<tag>")[0]
...     else:
...        print item
...
some text I want to capture.
 more stuff I want.
 i care

Используйте функцию split() asp.net для того же.

0 голосов
/ 26 февраля 2010

Групповой захват является последовательным, поэтому вы не можете. Вы можете сделать это за один раз с помощью регулярного выражения, как показано ниже, и присоединить строку в коде

^(?<line1>.*?)(?:\<\w*\>.*?\</\w*\>)(?<line3>.*?)$
0 голосов
/ 26 февраля 2010

К сожалению, нет, это невозможно. Решение состоит в том, чтобы захватить в два отдельных захвата и затем контактировать по факту.

Согласно этой ветке на этом сайте:

Регулярное выражение для пропуска символа в группе захвата

0 голосов
/ 26 февраля 2010

Не в моих силах. Обычно именно поэтому функции регулярного поиска и замены позволяют вам ссылаться на несколько групп захвата.

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