字符串的正则表达式既不在前面也不在后面跟任何字母字符

时间:2017-05-23 11:28:32

标签: regex regex-negation regex-lookarounds regex-greedy

我有以下关键字:

  1. 顶蓝色
  2. 蓝顶
  3. my top
  4. 光GRN-顶
  5. 顶棉
  6. 膝上型
  7. 膝上型光泽
  8. green top 0192
  9. 桌面45WAI
  10. topbest
  11. (更新条件)

    12。 village_top1993

    所需的匹配包括:顶部,顶部蓝色,蓝色顶部,顶部,轻型顶部,顶部棉花,绿色顶部0192, village_top1993

    我想创建一个正则表达式,我有这些条件:

    1. 字符串top在邻近" top"之前或之后不能有任何字母(a-z);喜欢"笔记本电脑"和#34; topbest"分别
    2. String top可以在其之前或之后包含任何标点符号或特殊字符。
    3. 字符串top可以在相邻位置旁边有任何特殊字符或字母表意味着" abcd top xyz" (这是一场比赛)
    4. 到目前为止我所做的是[^a-zA-Z]top[^a-zA-z],但这不符合我的条件。

4 个答案:

答案 0 :(得分:3)

使用否定的外观:

(?<![a-zA-Z])top(?![a-zA-Z])

答案 1 :(得分:0)

也许这符合您的需求:https://regex101.com/r/ptYfA5/1

图案: \w*?\btop\b\w*

\w是&#34; top&#34;之前和/或之后的任何长度(*量词)的单词-cha a。 \b表示单词边界。

如果你想覆盖领先数字,你也可以写一些像

这样的东西

(^[0-9]+?\. *)?\w*?\btop\b\w*

来自德国的问候。

答案 2 :(得分:0)

在您提供的正则表达式中,您错过了Z的大写字母:
 [^a-zA-Z]top[^a-zA-z]应为[^a-zA-Z]top[^a-zA-Z]

我建议使用:

[^a-zA-Z](top)[^a-zA-Z]

Demo on regex101

@horcrux's suggestion使用\btop\b似乎也很好。

答案 3 :(得分:0)

这个正则表达式适合您的需要吗?

  

https://regex101.com/r/ptYfA5/5

.*(?<![a-zA-Z])top(?![a-zA-Z]).*

.*             ## match any characters before top
(?<![a-zA-Z])  ## negative lookbehind : check we don't have any [a-zA-Z] character before top
top            ## assert the string "top"
(?![a-zA-Z])   ## negative lookahead : check we dont have any [a-zA-Z] after top
.*             ## match any characters after top