【问题标题】:Remove specific characters after matching substring with Perl grep使用 Perl grep 匹配子字符串后删除特定字符
【发布时间】:2016-03-17 04:48:17
【问题描述】:

我使用下面的表达式来获取一行文本的第二项。

/\s(.*?) /

一个示例输出可能是23:55:01。我也可以删除同一表达式中的冒号吗?

示例输入是:

16-03-17 05:00:02 JRTF: ...

... 之后的所有内容都应该是多余的。在这种情况下,我需要提取050002

编辑(现在是 Perl / grep 问题):

我需要这样做的原因是我得到所有大于当前时间的值。

我目前在 Perl 中使用 grep 以下列方式执行此操作:

my @windowLog = grep {
        join("", split(":", (split(" ", $_))[1])) > $UTCTime
} @oldLog;

其中@oldLog 是一个字符串数组,类似于上面的示例,$UTCTime 是当前时间。

看起来相当低效和不整洁。

【问题讨论】:

  • 使用另一个替换代码删除冒号。
  • 你能显示你的输入文本行和想要提取的输出吗?
  • @ritesht93 没问题 - 完成了。
  • 您需要使用正则表达式替换,^(\S*)\s(\d{2}):(\d{2}):(\d{2})\s(.*)^ 将是正则表达式并替换为 \2\3\4。如果您可以提及您正在使用的正则表达式风格/编程语言,那么我也可以提供一个示例
  • @ritesht93 谢谢 - 我已经更新了这个问题,所以它现在也是一个 grep 和 Perl 问题。

标签: regex perl grep


【解决方案1】:

我会写

my @windowLog = grep { (split)[1] =~ tr/://dr > $UTCTime } @oldLog;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 2023-01-24
    • 2014-12-03
    • 1970-01-01
    • 2014-08-20
    • 2023-03-29
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多