2017-05-23 33 views
0

我有这些关键字:正则表达式字符串没有任何字母字符,前面和后面

  1. 顶部
  2. 顶蓝色
  3. 蓝顶
  4. 我顶
  5. 光GRN-顶部
  6. 顶棉
  7. 笔记本电脑
  8. 笔记本光泽
  9. 绿色顶部0192
  10. 桌面45WAI
  11. topbest

(更新状态)

12 village_top1993

必需的匹配为:顶,顶级蓝色,蓝色顶级,顶级顶级轻质顶级顶级棉,顶级绿色0192,village_top1993

我想创建一个正则表达式,其中我具备这些条件:

  1. 字符串顶部不能有前述任何字母(AZ)或邻近后“顶部”喜欢“膝上型”和“ topbest“
  2. 字符串top可以在它之前或之后有任何标点或特殊字符。
  3. 字符串顶部可以有相邻位置旁边的任何特殊字符或字母的意思是“ABCD顶部XYZ”(这是一个比赛)

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

+1

你有没有试着用['\ BTOP \ B'(https://regex101.com/r/yvPF5R/1)? – horcrux

+0

你的正则表达式似乎已经足够满足你的条件:https://regex101.com/r/yvubqJ/1这是什么问题? – Mistalis

+0

是非常靠近的魂器。其实我错过了另一个条件。请检查。 – subhajit

回答

2

使用排除环视:

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

谢谢托托。它运作良好 – subhajit

+0

@subhajit:不客气,很高兴它有帮助。 – Toto

+0

@subhajit:你会在这里找到解释:http://www.regular-expressions.info/lookaround.html – Toto

0

也许是一个适合您的需要:https://regex101.com/r/ptYfA5/1

模式: \w*?\btop\b\w*

\w是之前和/或之后“顶”一个字一个烧焦任何长度(*量词)的。 \b意味着一个字边界。

如果你想要覆盖的领先数字的东西,你也可以写像德国

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

问候。

+0

相同但更简单的是'\ btop \ b' – Mistalis

+0

确实如此,但较长的正则表达式明确覆盖了OP的要求。所以当然你是对的,在这种情况下没关系:) –

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似乎也不错。

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 
+0

'。*'是多余的。 – Toto

+0

托托你能解释为什么吗?我不明白。有一个请求可以请你解释你在解决方案中使用的元字符。我会被高度忽视。谢谢 – subhajit

+1

@subhajit:Thre're无需测试前后是否有0个或更多任何字符。你只想在没有前后信件的情况下测试'top'。 – Toto

相关问题