#regex
Вопрос:
У меня есть следующий html-элемент в Sublime Text:
<div class="exg"><div><strong class="syn">investigate</strong><span class="syn">, conduct investigations into, make inquiries into, inquire into, probe, examine, explore, research, study, look into, go into</span></div>
Я хочу использовать регулярное выражение для выбора содержимого после и включая 5-ю запятую в этом элементе, останавливаясь перед
</span></div>
.
Итак, в этом случае я бы хотел выбрать:
, examine, explore, research, study, look into, go into
До сих пор мне удавалось писать это регулярное выражение, которое работает:
(<div class="exg"><div><strong class="syn">(w )((s)?(w )?) </strong><span class="syn">((,((s)?(w )?) )?){5})
Это позволяет мне выбрать часть перед тем, что мне нужно выбрать. Я пытался использовать это с позитивным взглядом назад, но это не работает, и я не могу понять, как это исправить. Вот что я попробовал:
(?<=(<div class="exg"><div><strong class="syn">(w )((s)?(w )?) </strong><span class="syn">((,((s)?(w )?) )?){3}))((,?((s)?(w )?) ?) )
Комментарии:
1. какой язык вы используете? поисковые окна переменной ширины доступны не во всех движках регулярных выражений…
2. Должен же быть какой-то способ добиться результата с помощью регулярного выражения, верно?
Ответ №1:
Вы часто используете круглые скобки. Также ваше выражение для перехвата слов между запятыми может быть проще. Заменив ваши группы на группы без захвата, вы получите ожидаемое совпадение в вашей первой (и единственной) группе с этим регулярным выражением:
(?<=<div class="exg"><div><strong class="syn">)(?:s?w)*</strong><span class="syn">(?:,(?:s?w)*){4}(.*?)(?=</span></div>)
Кстати, если вы хотите захватить 5-ю запятую, я думаю, что ваш квантификатор должен быть {4}
(но я, возможно, неправильно понял)
Проверьте демонстрацию
Обновление: если вы хотите удалить соответствующую группу (т. Е. Заменить ее пустой строкой). Просто сделайте наоборот: создайте одну группу до и одну после:
(<div class="exg"><div><strong class="syn">(?:s?w)*</strong><span class="syn">(?:,(?:s?w)*){4}).*?(</span></div>)
ДЕМОНСТРАЦИЯ
Затем замените в своем редакторе на 12
(группы друг за другом, без ранее сопоставленной строки между ними)
Комментарии:
1. Я попытался использовать find и заменить этим в Sublime Text, и он просто удалил все следующее:
investigate</strong><span class="syn">, conduct investigations into, make inquiries into, inquire into, probe, examine, explore, research, study, look into, go into
2. что именно вы хотите сделать? удалить все, кроме первой группы? вы также должны обновить свой вопрос
3. Я хочу удалить следующее:
, examine, explore, research, study, look into, go into
4. какая часть вопроса сбивает с толку или нуждается в обновлении?
5. в вашем вопросе вы упоминаете только, что хотите выбрать эту часть строки. Вы должны упомянуть, что хотите его удалить. потому что то, что мы на самом деле делаем (проверьте мой обновленный ответ!), захватывает остальное, чтобы заменить его группами, которые не являются тем, что вы изначально хотели выбрать