字符串的正则表达式之前和之后都没有任何字母字符

Regex for string neither preceded nor followed by any alphabet character

我有这些关键字:

  1. 顶部
  2. 顶蓝
  3. 蓝顶
  4. 我的顶
  5. 浅绿色顶部
  6. 纯棉
  7. 笔记本电脑
  8. 笔记本电脑光面
  9. 绿顶0192
  10. 桌面 45WAI
  11. 最佳

(更新条件)

12。 village_top1993

所需的匹配项是:top, top-blue, blue-top, my top, light-grn-top, top-cotton, green top 0192, village_top1993

我想在满足这些条件的情况下创建一个正则表达式:

  1. 字符串顶部在 "top" 前后不能有任何字母表 (a-z),分别像 "laptop" 和 "topbest"
  2. 字符串顶部可以在其前后包含任何标点符号或特殊字符。
  3. 字符串顶部可以在相邻位置旁边有任何特殊字符或字母表示"abcd top xyz"(这是一个匹配项)

到目前为止我所做的是[^a-zA-Z]top[^a-zA-z],但这不符合我的条件

也许那个符合您的需要:https://regex101.com/r/ptYfA5/1

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

其中 \w 是 "top" 之后 and/or 之前任意长度的字字符 a(* 量词)。 \b 表示单词边界。

如果你想涵盖前导数字的东西,你也可以写类似

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

来自德国的问候。

在您提供的正则表达式中,您在 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


使用 \btop\b 似乎也不错。

使用负环视:

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

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

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