正则表达式:单词边界,但仅适用于空格,行的开头或行尾

时间:2010-10-26 17:13:38

标签: regex

我正在寻找一些字边界来涵盖这三种情况:

  1. 字符串的开头
  2. 字符串结尾
  3. 白色空间
  4. 是否有类似的东西,因为\ b也包括 - ,/ etc。?

    想要通过上述内容替换此模式中的\ b:

    (\b\d*\sx\s|\b\d*x|\b)
    

3 个答案:

答案 0 :(得分:20)

尝试将\b替换为(?:^|\s|$)

这意味着

(
  ?: don't consider this group a match
  ^   match beginning of line
  |   or
  \s  match whitespace
  |   or
  $   match end of line
)

适用于Python和JavaScript。

答案 1 :(得分:9)

好的,所以你真正的问题是:

我如何匹配一个单位,可选地前面有一个数量,但只有在比赛前没有任何内容或空格?

使用

 (?<!\S)\b(?:\d+\s*x\s*)?\d+(?:\.\d+)?\s*ml\b

<强>解释

(?<!\S):断言在比赛前无法匹配非空格字符。

\b:匹配字边界

(?:\d+\s*x\s*)?:可选择匹配量词(仅限整数)

\d+(?:\.\d+)?:匹配一个数字(小数可选)

\s*ml\b:匹配ml,可选地以空格开头。

答案 2 :(得分:1)

\b带来的边界对空白敏感。它们是与\w\W\W\w之间的转换相关的复杂条件断言。有关如何更精确地编写锚点,请参阅this answer,以便您可以按照自己的方式处理空格。