Проблема границы слова регулярного выражения, когда угловые скобки примыкают к границе
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