加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何从Perl中的字符串中提取子串?

发布时间:2020-12-14 06:28:19 所属栏目:百科 来源:网络整理
导读:考虑以下字符串: 1)方案编号:abc-456-hu5t10(高优先级)***** 2)方案编号:frt-78f-hj542w(平衡) 3)方案ID:23f-f974-nm54w(超级公式运行)***** 等等在上述格式 – 粗体的部分是跨字符串的变化. ==想象一下,我有很多格式的字符串如上所示. 我想从上述每个字
考虑以下字符串:

1)方案编号:abc-456-hu5t10(高优先级)*****

2)方案编号:frt-78f-hj542w(平衡)

3)方案ID:23f-f974-nm54w(超级公式运行)*****

等等在上述格式 – 粗体的部分是跨字符串的变化.

==>想象一下,我有很多格式的字符串如上所示.
我想从上述每个字符串中选择3个子字符串(如下面的BOLD所示).

>包含字母数字值的第一个子字符串(例如上面是“abc-456-hu5t10”)
>包含该字的第二个子字符串(例如上面的“高优先级”)
>第三个子字符串包含*(IF *存在于字符串ELSE的末尾离开它)

如何从上面显示的每个字符串中选取这3个子字符串?我知道它可以使用Perl中的正则表达式…可以帮助吗?

你可以这样做:
my $data = <<END;
1) Scheme ID: abc-456-hu5t10 (High priority) *
2) Scheme ID: frt-78f-hj542w (Balanced)
3) Scheme ID: 23f-f974-nm54w (super formula run) *
END

foreach (split(/n/,$data)) {
  $_ =~ /Scheme ID: ([a-z0-9-]+)s+(([^)]+))s*(*)?/ || next;
  my ($id,$word,$star) = ($1,$2,$3);
  print "$id $word $starn";
}

关键是正则表达式:

Scheme ID: ([a-z0-9-]+)s+(([^)]+))s*(*)?

其中分解如下.

固定字符串“方案ID:”:

Scheme ID:

其次是一个或多个字符a-z,0-9或 – .我们使用括号将其视为$1:

([a-z0-9-]+)

后面有一个或多个空格字符:

s+

随后是一个开放的支架(我们逃脱),后面是任意数量的不是一个关闭支架的字符,然后是一个关闭支架(转义).我们使用未转义的括号来捕获单词为$2:

(([^)]+))

跟随一些空格,可能是*,被捕获为$3:

s*(*)?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读