我试图捕获两组字符串之间的一组字符串。RegEx基本上可以工作,但当模式发生变化时,它不能捕获所有字符串。
字符串为:
2023-03-20 / 10:56:58 4737 Security-Enabled Global Group Modified 73 high SRVDC2 john.smi.admin 10.7.3.252 1
在日期和时间之后是一个四位数的数字,有时不存在,所以日志显示N/A。这就是我遇到麻烦的时候。RegEx必须能够捕获四位数和N/A消息。
以下是我的尝试:
import re
string = '2023-03-20 / 10:56:58 4737 Security-Enabled Global Group Modified 73 high SRVDC2 john.smi.admin 10.7.3.252 1'
pattern = '(?<=\d{4} )(.*?)(?=\s\d{2}\s)'
res = re.findall(pattern,string,re.MULTILINE)
print(res)
3条答案
按热度按时间omhiaaxx1#
您可以使用
|
(或)合并两个lookbehind。o2g1uqev2#
请改用
'(?<=\d{4} | N/A )(.*?)(?=\s\d{2}\s)'
。它向后查找4位数字和空格或空格之间的
N/A
。这是保持向后查找组固定长度所必需的。ylamdve63#
你不需要使用任何lookarounds,你可以匹配然后使用capture group 1值:
说明
\b
防止部分字匹配的字边界(?:\d{4}|N/A)
匹配4位数字或N/A
\s+
匹配1+空格字符(.*?)
捕获组1,匹配除换行符外的任意字符,尽量少匹配\s+\d\d\s
匹配1+个空格字符、2个数字和一个空格字符参见regex demo