复杂的正则表达式,可以过滤单词

有人可以用正确的正则表达式来帮助我匹配line1而不是line2。 我希望匹配标准基于

  • 如果该行以'用户名'开头,后跟1个或多个空格
  • 随后是一个数字和一个或多个空格
  • 之后是任何不包含'grep'并以'some / path / somescript.py'结尾的字符串
  • 下面的例子应该匹配line1而不是line2

    line1 = "username   842 93.0  0.1 180740 36016 ?        Sl   Jan21 747:36 /some/path/somescript.py"
    line2 = "username  8227  0.0  0.0  14356  2496 pts/5    S+   11:33   0:00 grep /some/path/somescript.py"
    

    我试过(^usernames*)(d+s*) ,它符合第1和2号标准,但不知道如何满足第3条要求。 这个在线工具可能对测试有帮助


    试试这个模式:

    ^usernames+d+s+(?!.*grep).*some/path/somescript.py$
    

    演示

    这里没有太多解释,除了这个:

    (?!.*grep)
    

    这是一个负面的超前断言,它表示在模式中的这个确切位置,断言我们在字符串的其余部分的任何地方都找不到grep 。 那个断言被发现是真的,我们然后匹配:

    .*some/path/somescript.py$
    

    也就是说,只要行在some/path/somescript.py结束,我们就匹配任何内容。

    链接地址: http://www.djcxy.com/p/13469.html

    上一篇: Complex Regex that can filter word

    下一篇: Split by delimiter without remove it from string