我对正则表达式不太熟悉。您能用正则表达式帮助我选择以下文本中日期之前的字符串吗?这里的结果应该输出:
GOT222
下面是文本:
[2017-11-10 14:00:05] USER = XXX,COMM = RTRV-RET-INF :::::: USER_INFO =“ XXX”; ,OWNER = XXX,IP = 99.99.999.999 GOT222 2017-11-10 THU 14:00:05
答案 0 :(得分:2)
尝试此正则表达式:
\S+(?=\s+\d{4}(?:-\d{2}){2})
说明:
\S+
-匹配1个以上出现的非空白字符(?=\s+\d{4}(?:-\d{2}){2})
-前瞻性,以确保在当前匹配项之后出现1+次空格,其后跟随格式为XXXX-XX-XX
的日期,其中X
是数字。 / li>
答案 1 :(得分:0)
my ($string) = $text =~ /\s(\S+)\s+20[0-9]{2}-[0-9]{2}-[0-9]{2}\s/;
或
my ($string) = $text =~ /\s(\S+)\s+20\d{2}-\d{2}-\d{2}\s/a; # 5.14+
注意:
前导\s
是可选的。它是一种优化。
结尾的\s
是可选的。它可以确保像2000-00-0001
之类的序列不被视为日期。但是,它将以匹配后的日期结尾的字符串。
答案 2 :(得分:0)
您可以在句子的结尾找到字符串。
XXXX .... XXXXXXX GOT222 2017-11-10周四14:00:05
查找
(\w+)\s[\w-]+\s\w+\s[\w:]+$
替换
$1