使用正则表达式查找日期之前的字符串

时间:2019-02-24 05:58:12

标签: regex perl

我对正则表达式不太熟悉。您能用正则表达式帮助我选择以下文本中日期之前的字符串吗?这里的结果应该输出:

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

3 个答案:

答案 0 :(得分:2)

尝试此正则表达式:

\S+(?=\s+\d{4}(?:-\d{2}){2})

Click for Demo

说明:

  • \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