当尖括号与边界相邻时,正则表达式字边界问题

时间:2012-01-31 21:53:52

标签: regex word-boundary

正则表达式:

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

示例字符串:

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

我不确定为什么找不到síntomas&lt; 之间的单词边界。另一方面存在同样的问题&gt; tienen

有关如何更恰当地匹配此边界的建议?

当我给它以下输入时,正则表达式按预期匹配:

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

删除边缘条件\ b \bPHRASE\b不是一个选项,因为它无法匹配部分单词

更新

这就是诀窍:(感谢 Igor Mosty DK NickC

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

我需要改进与[\s\.\?\!]的边界匹配,并使这些边缘匹配为正向前观和后观。

2 个答案:

答案 0 :(得分:4)

\b是一个零长度匹配,可以出现在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。单词字符定义为[A-Za-z0-9 _] * <不是单词字符,这就是\b不匹配的原因。

您可以尝试使用以下正则表达式((?: )non-capturing parentheses group):

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

*)实际上,这对所有正则表达式引擎都不正确。准确地说,\ b匹配\w\W,其中\w匹配任何字符。正如Tim Pietzcker在对这个答案的评论中指出的那样,“单词字符”的含义在实现之间有所不同,但我不知道\w匹配<>的任何地方。 / p>

答案 1 :(得分:3)

我认为您正在尝试执行以下操作:

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