我对正则表达式有疑问,在这里是我的文字:
1 200 file:test01.txt, action:read, User:dummy
2 201 file:test01.txt, action:write, User:dummy
3 202 file:unknown, keepalive , User:dummy
4 450 file:test01.txt, action:read, User:dummy
5 500 file:test01.txt, action:read, User:dummy
6 201 profiles, action:reload, User:dummy
我想处理所有行:
所以我会匹配:
2 201 file:test01.txt, action:write, User:dummy
3 202 file:unknown, keepalive , User:dummy
6 201 profiles, action:reload, User:dummy
我正在寻找一种获取行的方式,其中:动作与读取不同,并且没有出现动作
我以多种方式尝试都没有成功,这是我的最后一个失败,第一行仍然存在...
^\d+\s+(?<code>(20[012])).*(action:(?<!read))?
https://regex101.com/r/HGESxR/1
有任何提示吗?
谢谢马塞洛
您可以使用
^\d+\s+(?<code>20[0-2])\s(?:.*action:(?!read)(?<action>\w+)|(?!.*action)).*
请参见regex demo
详细信息
^
-字符串开头\d+
-1个以上的数字\s+
-1+空格(?<code>20[0-2])
-组”代码:20
,然后是0
,1
或2
\s
-空格(?:.*action:(?!read)(?<action>\w+)|(?!.*action))
-与任何一个非捕获组匹配.*action:(?!read)(?<action>\w+)
-0+个除换行符以外的字符,尽可能多地为action:
子字符串,然后进行“动作”组捕获任何1+个单词的字符,但不以read
字符序列开头|
-或(?!.*action)
-紧接在右边,除换行符外,尽可能多的0+个字符后不应有action
].*
-尽可能多0+个除换行符以外的字符]