gpt4 book ai didi

regex - Perl - 正则表达式、条件语句并根据不一致的字符串匹配多个对象

转载 作者:行者123 更新时间:2023-12-04 19:33:12 25 4
gpt4 key购买 nike

我将文本文件中的每一行加载到一个变量中 ($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 的变量中(如果存在的话)。

最佳答案

我经常看到人们试图将太多内容塞进单个正则表达式的例子

我会这样做

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

  • 从字符串末尾删除任意数量的非单词字符和价格以及可选的空格,捕获价格

  • 如果找到,则将捕获分配给 $price

分别处理前缀和后缀使得编写清晰的解决方案变得容易得多,如下所示。不幸的是,无法改进描述前缀的方括号和反斜杠的困惑情况,除非您想使用 \[ [[^][]*\] 我认为这不会好得多

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

while ( <DATA> ) {
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

关于regex - Perl - 正则表达式、条件语句并根据不一致的字符串匹配多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34157094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com