如何在多行中交换字符串

412p9w

tldr; 如何交换帐户并删除减号

该文件包含这样的多个事务

输入:

2018/01/08 * Aldi
    ; MD5Sum: a587a267588505265ae437c43c978886
    ; CSV: 2018-1-8,aldi,40.85
    Expenses:Groceries
    Expenses:Unknown                                USD -40.85
    ; :Groceries:

预期产量:

2018/01/08 * Aldi
    ; MD5Sum: a587a267588505265ae437c43c978886
    ; CSV: 2018-1-8,aldi,40.85
    Expenses:Groceries                              USD 40.85 
    Expenses:Unknown                                
    ; :Groceries:

请注意,最右边的金额已被取反,它是附加到Expenses:Groceries而不是Expenses:Unknown

这里

使用perl的最简单方法是一次读取所有数据,将其拆分为节,大概在行的开头以4位数字开头,然后分别对每个节进行操作。由于未在问题中完全指定数据,因此对数据进行了假设。

#!/usr/bin/perl
use strict;
my $data = join("", <>);
my @stanzas = split(/^(?=\d{4})/m, $data);
foreach my $st (@stanzas){
 if($st =~ m/Expenses:(?!Unknown)\S+\s*$/m){
  if($st =~ m/Expenses:Unknown\s+(USD\s+-[0-9.]+)/){
     my $amount = $1; 
     $amount =~ s/-//;
     $st =~ s/Expenses:(?!Unknown)(\S+)(\s*)$/Expenses:$1                              $amount/m;
     $st =~ s/Expenses:Unknown(\s+USD\s+-[0-9.]+)/Expenses:Unknown/;
  }
 }
}
print join("", @stanzas);

在这里,该split()函数使用预(?=)模式将整个输入分割为4位数字的行。

对于每个节,如果它的“支出”不为“ Fenses”,然后为“ Unknown”,则为非空格,然后仅是空格,“ Unknown”为负,后跟一个负数,则将捕获该数字及其前面的USD,并减去负号。

结果将替换为具有一定固定空间量的第一条匹配行,并从未知行中删除。单独执行此操作可以使这两个字段在节中的顺序不同。

最后,将节连接并打印。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中创建多行字符串?

如何在JavaScript中的多行代码中打断字符串?

如何在2D字符串数组中交换字符串的位置

如何在Haskell中编写多行字符串?

您如何在Go中编写多行字符串?

如何在Bash中输出多行字符串?

如何在字符串中交换两个字符?

如何交换字符串中的字符

如何在多行中将字符串分隔并保留YAML中的空格?

如何在Julia中解析多行字符串?

如何在R中做多行字符串?

如何正确交换字符串中的某些字符

如何在ARM模板中编写多行字符串

如何在Python3中将多行字符串读取为文件流?

如何在C ++中采用多行字符串输入?

如何在多行中将YAML中的字符串断开?

如何在Android字符串中修剪多行?

如何在lua中删除多行字符串

如何在源代码中的多行中编写单行字符串文字

如何在Yaml中的多行字符串中转义哈希(#)字符?

如何在yii中输入多行字符串?

如何在Perl中从多行字符串创建集合?

如何在Powershell中的其他字符串中插入多行字符串?

如何在Microsoft Office中搜索多行字符串?

如何在目标c中交换字符串而没有任何空格?

如何在python中的多行字符串中的两个子字符串之间提取字符串的一部分

如何在 Python 中获取多行字符串的子字符串?

如何在R中的原子向量中以逗号分隔的多行中保存复制的字符串?

如何在R中交换部分字符串?