【问题标题】:Regex word boundary issue when angle brackets are adjacent to the boundary尖括号与边界相邻时的正则表达式单词边界问题
【发布时间】:2012-01-31 21:53:51
【问题描述】:

正则表达式:

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

示例字符串:

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

我不确定为什么找不到 síntomas 之间的单词边界。 >tienen

之间存在同样的问题

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

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

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

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

更新

这成功了:(感谢 IgorMostyDKNickC

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

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

【问题讨论】:

  • 我相信\b 只适用于字母数字“单词”。您可以使用手动字符类,例如 [^A-Za-z0-9&lt;&gt;_]
  • 看起来

标签: regex word-boundary


【解决方案1】:

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

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

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

*) 实际上,这并不适用于所有正则表达式引擎。准确地说,\b 匹配\w\W,其中\w 匹配任何单词字符。正如 Tim Pietzcker 在对此答案的评论中指出的那样,“单词字符”的含义在不同的实现中有所不同,但我不知道 \w&lt;&gt; 匹配的任何地方。

【讨论】:

  • \w 的定义在正则表达式实现之间差异很大。在 Python 中,如果您要求它尊重当前的语言环境,在 .NET 中它完全支持 Unicode,在 JavaScript 中它实际上只匹配 ASCII alnums 等...
  • @TimPietzcker:你说得对,但在这种特殊情况下重要的是\w 在任何实现中都不匹配&lt;&gt;
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多