首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配正则表达式中第n列的十进制数

匹配正则表达式中第n列的十进制数
EN

Stack Overflow用户
提问于 2018-03-15 16:58:17
回答 2查看 107关注 0票数 0

我需要在Perl代码中将列与P&L匹配。它的回程利润百分比。可以是消极的,也可以是积极的。号码可以是-5.12或1005.12。

代码语言:javascript
复制
2018-03-15 16:38:28 (DEBUG):    current trend duration:   6
2018-03-15 16:38:28 (INFO): 
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) REPORT:
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) entry date (UTC)    exit date (UTC)     exposed duration    P&L     profit
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-10 14:00    2018-03-10 15:10    an hour             -0.00   -0.01
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-10 17:50    2018-03-10 23:00    5 hours             -0.30   -7.72
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-11 02:10    2018-03-11 03:30    an hour             120.06  1.58
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-12 15:40    2018-03-12 22:00    6 hours             -0.15   -4.05
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-13 09:10    2018-03-13 10:10    an hour             0.00    0.13
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-13 12:20    2018-03-13 13:30    an hour             -120.01 -0.36
2018-03-15 16:38:28 (INFO): (ROUNDTRIP) 2018-03-13 21:00    2018-03-13 22:20    an hour             0.06    1.75
2018-03-15 16:38:28 (INFO): 
2018-03-15 16:38:28 (INFO): (PROFIT REPORT) start time:          2018-03-10 00:00:00

例如,匹配是:

代码语言:javascript
复制
-0.00
-0.30
120.06
-0.15
0.00 
-120.01
0.06

如何处理PCRE Regex?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-15 17:04:04

试试这个perl的regex:

代码语言:javascript
复制
ROUNDTRIP\)\s+\d{4}-\d{2}-\d{2}.*?\K-?\d+\.\d+

greppcre模式下的例子:

代码语言:javascript
复制
$ grep -oP 'ROUNDTRIP\)\s+\d{4}-\d{2}-\d{2}.*?\K-?\d+\.\d+' file
-0.00
-0.30
120.06
-0.15
0.00
-120.01
0.06
票数 0
EN

Stack Overflow用户

发布于 2018-03-15 17:13:33

它可以很容易地使用awk 而无需任何regex

代码语言:javascript
复制
awk 'NF>10 && $11+0 == $11{print $11}' file

代码语言:javascript
复制
-0.00
-0.30
120.06
-0.15
0.00
-120.01
0.06

详细信息:

  • 条件NF>10 && $11+0 == $11检查一行中是否有10个以上字段,并确保第11个字段是数字字段。
  • {print $11}打印每个记录的第11个字段

如果您正在寻找perl脚本,那么下面是等效的perl命令:

代码语言:javascript
复制
perl -alne 'print $F[11] if $F[11] =~ /^-?\d*\.?\d+$/' file

代码语言:javascript
复制
-0.01
-7.72
1.58
-4.05
0.13
-0.36
1.75

perl代码:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;

my @words;
while(<>)  {
   @words = split(" ");
   if (scalar @words > 10 && $words[11] =~ /^-?\d*\.?\d+$/) {
      print $words[11] . "\n";
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49305171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档