Отрицательный просмотр регулярного выражения и граница слова удаляют первый символ из группы захвата

Я пытаюсь захватить каждое слово в строке, кроме «и». Я также хочу зафиксировать слова, окруженные звездочками, например *this*. Команда регулярного выражения, которую я использую, в основном работает, но когда она захватывает слово со звездочками, она пропускает первое (так что *это* будет захвачено только это*). Вот регулярное выражение, которое я использую:

/((?!and\b)\b[\w*]+)/gi

Когда я удалю границу последнего слова, она захватит все *это*, но не пропустит ни одного из 'и'.


person brandonstrong    schedule 17.07.2015    source источник
comment
для какого языка вы используете регулярное выражение?   -  person Jim Chertkov    schedule 17.07.2015
comment
Можете ли вы опубликовать пару образцов строк?   -  person chris85    schedule 17.07.2015
comment
Я пишу для С#. Вот пример строки: *this* и th*at* --> this* th*at*   -  person brandonstrong    schedule 17.07.2015


Ответы (1)


Проблема в том, что * не рассматривается как символ слова, поэтому \b не соответствует положению перед ним. Я думаю, что вы можете заменить его на:

^(?!and\b)([\w*]+)|((?!and\b)(?<=\W)[\w*]+)

Символ \b был заменен на \W (символ, не являющийся словом), чтобы соответствовать также *, однако тогда первое слово в строке не будет совпадать, поскольку ему не предшествует символ, не являющийся словом. Вот почему я добавил альтернативу.

ДЕМО

person m.cekiera    schedule 17.07.2015
comment
Работает как шарм! Спасибо m.cekiera. - person brandonstrong; 17.07.2015