当前位置:  开发笔记 > 编程语言 > 正文

Perl - Regex,条件和匹配不一致字符串的多个对象

如何解决《Perl-Regex,条件和匹配不一致字符串的多个对象》经验,为你挑选了1个好方法。

从文本文件中我将每一行加载到变量($line)中.每一行都有一般形式,但不一致,例如

[Foo] - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt £34.99
[BARBAR] ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis £255.25
[BAZZ] - deserunt mollit anim id est laborum. - £500

对于每一行,我想要一个字符串

没有方括号

不包含前导空格或非字母数字字符,例如' - '

为了进一步复杂化,我想将价格作为一个不同的变量返回.

以上数据的几个例子:

$var1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt';
$var2 = '£99.99';

$var1 = 'ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis';
$var2 = '£255.25';

$var1 = 'deserunt mollit anim id est laborum';
$var2 = '£500';

我真的不知道从哪里开始(对我来说)一个非常复杂的正则表达式.

编辑边缘案例......

事实证明,在文本文件中有一些我的描述没有涵盖的边缘情况,例如:

[BARBAR] ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis £255.25 (5% off)
[BAZZ] - deserunt mollit anim id est laborum. - £500 (%10 less)

理想情况下,我想将值(例如,'减少10%','减5%')存储在一个被调用的变量中($discount如果存在的话).



1> Borodin..:

我不断看到有人试图将一个正则表达式过多地塞进一个正则表达式

我会这样做的

从字符串的开头删除括号中的子字符串,后跟任意数量的非单词字符

删除任意数量的非单词字符,后跟价格,并从字符串末尾删除可选的空格,捕获价格

$price如果找到一个,则分配捕获

单独处理前缀和后缀使得编写清晰的解决方案变得更加容易,如下所示.不幸的是,描述前缀的括号和反斜杠的混乱无法改进,除非你想使用\[ [^][]* \]我认为没有明显更好的

use strict;
use warnings 'all';
use feature 'say';

while (  ) {
    chomp;
    s/ ^ \[ [^\[\]]* \] \W* //x;

    my $price;
    $price = $1 if s/ \W* (£[\d.]+)? \s* \z //x;

    say $_;
    say $price if $price;
}


__DATA__
[Foo] - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt £34.99
[BARBAR] ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis £255.25
[BAZZ] - deserunt mollit anim id est laborum. - £500

产量

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
£34.99
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
£255.25
deserunt mollit anim id est laborum
£500


我也见过这种趋势.我真的不确定为什么 - 我的意思是,我认为'强力'正则表达式看起来非常有效,但它......确实给了perl一些不好的代表.增加复杂性,降低清晰度,但实际上并没有实现所有简洁的效率.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有