Проблема границы слова регулярного выражения, когда угловые скобки примыкают к границе

Regex:

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

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

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

Я не уверен, почему не найдено слово границы между символами и <. Та же проблема существует на другой стороне между > и 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 ответа

Решение

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

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

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

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

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

\s< low="" number="" low="">\s
Другие вопросы по тегам