可以过滤单词的复杂正则表达式
Complex Regex that can filter word
谁能帮我用正确的正则表达式来匹配第 1 行而不是第 2 行。我希望匹配条件基于
- 如果该行以 'username' 开头,后跟 1 个或多个空格
- 后跟一个数字和一个或多个空格
- 后跟任何不包含 'grep' 且以 'some/path/somescript.py'
结尾的字符串
下面的例子应该匹配第 1 行而不是第 2 行
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"
我试过 (^username\s*)(\d+\s*)
满足第 1 条和第 2 条,但不确定如何满足第 3 条要求。此 online 工具可能有助于测试
试试这个模式:
^username\s+\d+\s+(?!.*grep).*some\/path\/somescript\.py$
这里就不多解释了,除了这个:
(?!.*grep)
这是一个否定前瞻 断言,它表示在模式中的这个确切位置,断言我们在其余部分的任何地方都找不到 grep
字符串。该断言已被发现,然后我们匹配:
.*some\/path\/somescript\.py$
也就是说,只要该行以 some/path/somescript.py
.
结尾,我们就匹配任何内容
谁能帮我用正确的正则表达式来匹配第 1 行而不是第 2 行。我希望匹配条件基于
- 如果该行以 'username' 开头,后跟 1 个或多个空格
- 后跟一个数字和一个或多个空格
- 后跟任何不包含 'grep' 且以 'some/path/somescript.py' 结尾的字符串
下面的例子应该匹配第 1 行而不是第 2 行
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"
我试过 (^username\s*)(\d+\s*)
满足第 1 条和第 2 条,但不确定如何满足第 3 条要求。此 online 工具可能有助于测试
试试这个模式:
^username\s+\d+\s+(?!.*grep).*some\/path\/somescript\.py$
这里就不多解释了,除了这个:
(?!.*grep)
这是一个否定前瞻 断言,它表示在模式中的这个确切位置,断言我们在其余部分的任何地方都找不到 grep
字符串。该断言已被发现,然后我们匹配:
.*some\/path\/somescript\.py$
也就是说,只要该行以 some/path/somescript.py
.