用Perl替换一个文本的句子,并用另一个文本的相应句子替换

键盘

我有一个这样的文本文件

mc1s2  L#'|NA|det indice|indice|nc Sensex|NA|adj
progressait|progresser|v de|de|prep

和另一个这样的文件文本

programmer:_[1]_:_P0_(P1)=1 progresser:_[1]_:_P0=1 
prohiber:_[1]_:_P0_P1=1
projeter:_[3]_:_P0_P1=1;_:_P0_P1_(PL)=1;_:_P0_P1_(PP<sur>)=1

我想进行替换以创建这样的第三个文件文本

mc1s2  L#'|NA|det indice|indice|nc Sensex|NA|adj
progresser:_[1]_:_P0=1 de|de|prep As you can see I'd like to replace
progressait|progresser|v with progresser:_[1]_:_P0=1. 

我想对所有动词都这样做。

这个脚本回答了我的迫切需求,但我听不懂它的最后一部分

use strict;
use warnings;
use autodie;

my $lookupfile = 'lookup.txt';
# Contains:
# programmer:_[1]_:_P0_(P1)=1
# progresser:_[1]_:_P0=1 
# prohiber:_[1]_:_P0_P1=1
# projeter:_[3]_:_P0_P1=1;_:_P0_P1_(PL)=1;_:_P0_P1_(PP<sur>)=1

my $datafile = 'data.txt';
# Contains:
# mc1s2  L#'|NA|det indice|indice|nc Sensex|NA|adj progressait|progresser|v de|de|prep 

my %lookup;
open my $fh, '<', $lookupfile;
while (<$fh>) {
    chomp;
    my ($field) = split ':';
    $lookup{$field} = $_;
}

# use Data::Dump; # Used to debug the lookup table.
# dd \%lookup;

open $fh, '<', $datafile; while (<$fh>) {
    s{(?<=\s)(\S+)} {
        my $entry = $1;
        my @fields = split '\|', $entry;
        $lookup{$fields[1]} // $entry;
    }eg;

    print;
}

我不明白这一点:

open $fh, '<', $datafile;
while (<$fh>) {
    s{(?<=\s)(\S+)}{
        my $entry = $1;
        my @fields = split '\|', $entry;
        $lookup{$fields[1]} // $entry;
    }eg;

你能帮助我吗?

鲍罗丁

这种替代

s{(?<=\s)(\S+)}{
    my $entry = $1;
    my @fields = split '\|', $entry;
    $lookup{$fields[1]} // $entry;
}eg;

使用/e修饰符,该修饰符指示将不直接使用替换字符串,而是将其作为Perl代码执行以生成用于替换匹配项的字符串。

  • 匹配会找到空格字符后面的下一个非空格字符序列,因此在这种情况下$1,初始设置为L#'|NA|det

  • $1复制到$entry,并$entry在管道字符上拆分|@fields

  • %lookup散列索引是用$fields[1]-在第二个条目@fields这是字符串NA

  • 该代码块返回该哈希元素的值,或者$entry如果没有带有该键的哈希元素,则返回整个值注意,因为$entry是整个匹配的字符串,所以除非找到相应的元素,否则不会有任何变化,%lookup因为该字符串已被自身替换

我希望这有帮助

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找并用另一个文件的内容替换一个文件的部分文本

如何自动比较两个句子并替换一个句子中出现但另一个句子中没有的值?

用另一个词替换一个词,而不替换另一个在 Javascript 中的同一个句子中包含相似子串的词

从另一个文件替换一个文件中的文本

如何用另一个文件中的文本替换一个文件中的文本?

用另一个词替换句子中的一个词

perl:用另一个列表替换一个子字符串列表

Perl XML LibXML 用 xsd 架构上的另一个节点替换一个节点

使用查找另一个数据框替换一个数据框中的文本

llvm用另一个函数替换一个函数

在Spring编译期间用另一个注释替换一个注释?

Android通知-用另一个通知替换一个通知

用另一个功能替换一个功能进行测试

用另一个 -Javascript 替换一个对象

用另一个向量的条件替换一个向量的多个值

jQuery用另一个替换一个类

用另一个Spark Java替换一个列值

在git仓库上用另一个项目替换一个项目

PHP - 用另一个替换一个数组的 li

用另一个数据框的值替换一个值

用R中的另一个矩阵替换一个矩阵

用另一个矩阵替换一个矩阵

用BeautifulSoup中的另一个标签替换一个标签

用另一个变量的值替换一个变量中的NA

用文件中的另一个单词替换一个特定的单词

Python 用另一个列表替换一个列表

如何用另一个表中的相应值替换一个表中的ID?

用 DOM 中的另一个文本替换元素文本

如何替换基于另一个表的文本?