Проблема границы слова регулярного выражения, когда угловые скобки примыкают к границе - PullRequest
1 голос
/ 01 февраля 2012

Regex:

\b< low="" number="" low="">\b

Пример строки:

 <b22>Aquí se muestran algunos síntomas < low="" number="" low=""> tienen el siguiente aspecto.</b22> 

Я не уверен, почему не найдено слово границы между síntomas и <</strong>. Такая же проблема существует на другой стороне между > и tienen

Предложения о том, как я мог бы более точно соответствовать этой границе?

Когда я даю следующие данные, регулярное выражение совпадает с ожидаемым:

Aquí se muestran algunos síntomas< low="" number="" low="">tienen el siguiente aspecto.

удаление граничных условий \ b \bPHRASE\b не вариант, потому что он не может соответствовать частям слов

Обновление

Это помогло: (Спасибо Игорю , Мосту , DK и NickC )

Regex(String.Format(@"(?<=[\s\.\?\!]){0}(?=[\s\.\?\!])", innerStringToMatch);

Мне нужно было улучшить соответствие границ до [\s\.\?\!] и сделать так, чтобы эти края соответствовали положительным взглядам вперед и назад.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

\b - это совпадение нулевой длины, которое может происходить между двумя символами в строке, где один является символом слова, а другой - не символом слова. Символ слова определяется как [A-Za-z0-9 _] *. < не является символом слова, поэтому \b не соответствует.

Вместо этого вы можете использовать следующее регулярное выражение ((?: ) - это группа не захватывающих скобок ):

(?:\b|\s+)< low="" number="" low="">(?:\b|\s+)

*) На самом деле, это не правильно для всех двигателей регулярных выражений. Чтобы быть точным, \ b соответствует между \w и \W, где \w соответствует любому символу слова . Как отметил Тим Пицкер в комментарии к этому ответу, значение «символ слова» отличается в разных реализациях, но я не знаю, где \w соответствует < или >.

3 голосов
/ 01 февраля 2012

Я думаю, вы пытаетесь сделать следующее:

\s< low="" number="" low="">\s
...