正则表达式匹配一个字符串后跟一些字符串

时间:2016-07-12 13:14:24

标签: regex

我有一个字符串块,如下所示

1. While #EngineSpeed$b4tgup#
2. While #AcceleratorPedal$desddd# <=2
3. While #AcceleratorPeda@$desddd# <=2
4. While #AcceleratorPe#al$desddd# <=2
5. While #AcceleratorP@dal$desddd# <=2
6. While #AcceleratorPeda l$desddd# <=2
7. 设置 #AcceleratorPedal$y6qs8m#=@AcceleratorPedal+0.06
8. 设置 #WaitStart$jhx0vu#=11
9. 设置 #WaitStart$jhx0vu#^11
10. 设置 #WaitStart$jhx0vu#_11
11. 设置 #WaitStart$jhx0vu#-11
12. 设置 #AcceleratorQuora$yd6ba3#=1
13. 设置 #AcceleratorQuora$yd6bd3#=1
14.
15. Check #EnginePower#
16. While #EngineSpeed
17. set #WaitStart
18. set #WaitStart<13
19. set #WaitStart<=13
20. set #WaitStart <= 13

现在我希望有一个正则表达式来匹配一个以#开头的子字符串,但不跟#后跟,或者不跟这个$\w{6}#这样的子字符串。

所以在上面的字符串块中只有第16,17,18,19,20行匹配,第16行的结果是 #EngineSpeed ,第17行的结果是 #WaitStart < / strong>,其他不匹配,在第20行,结果也是 #WaitStart ,后跟<= 13,后面跟#或{{1} },所以它也匹配!

例如,在第15行中,字符串是检查#EnginePower#,它以$\w{6}#开头,但后跟#,第13行字符串为< strong>设置#AcceleratorQuora $ yd6bd3#= 1 ,它以#开头,后跟一个像#这样的子字符串。

我写了一个像$\w{6}#这样的正则表达式,但是RegexBuddy中的测试结果如下图所示,几乎每一行都匹配,它不符合我的要求,我怎样才能修改正则表达式?提前谢谢!

enter image description here

1 个答案:

答案 0 :(得分:2)

从您想要匹配的上述所有字符串

  
      
  1. #EngineSpeed
  2.   
  3. 设置 #WaitStart
  4.   
  5. 设置 #WaitStart &lt; 13
  6.   
  7. 设置 #WaitStart &lt; = 13
  8.   
  9. 设置 #WaitStart &lt; = 13
  10.   

您可以使用

(?<=\s)#\w+(?!.*[@$#])

请参阅this regex demo

<强>详情:

  • (?<=\s) - 之前必须有空格......
  • # - 文字哈希
  • \w+ - 一个或多个单词字符
  • (?!.*[@$#]) - 如果该行@之后的某处有$#\w+,则匹配失败。