检索与 Perl 中的所有正则表达式完全匹配的模式

2024-02-27

我有一个子图数据库,如下所示:

t # 3-231, 1
v 0 94
v 1 14
v 2 16
v 3 17
u 0 1 2
u 0 2 2
u 0 3 2
t # 3-232, 1
v 0 14
v 1 94
v 2 19
v 3 91
u 0 1 2
u 0 3 2
u 1 2 2
t # 3-233, 1
v 0 17
v 1 91
v 2 16
v 3 94
u 0 1 2
u 0 3 2
u 1 2 2
t # 3-234, 1
v 0 90
v 1 93
v 2 102
v 3 95
u 0 1 2
u 0 3 2
u 1 2 2

我想检索包含以下模式的所有交易:“u 0 1 2”和“u 0 2 2”以及交易 ID(例如以 t # 开头的行)。

我使用以下代码来完成这项工作:

#!/usr/bin/perl -w

use strict;

my $input = shift @ARGV or die $!; 

open (FILE, "$input") or die $!;

while (<FILE>) {

my @fields = ('t', 'u\ 0\ 1', 'u\ 0\ 2');  
my $field_regex = join( "|", @fields );
my @field_lines;

    push( @field_lines, $_ ) if ( /^(?:$field_regex) / );
    last if @field_lines == @fields;

push @field_lines, "";

print join( "\n", sort @field_lines );
}

close FILE;

但是,当只有一行匹配时,它会检索模式,例如:

t # 3-231, 1
u 0 1 2
u 0 2 2
t # 3-232, 1
u 0 1 2
t # 3-233, 1
u 0 1 2
t # 3-233, 1
u 0 1 2

我的最终目标是检索与我的正则表达式完全匹配的交易,例如

t # 3-231, 1
u 0 1 2
u 0 2 2

感谢您的帮助!

Olha


一种方法:保留当前的 ​​transaction-id,并将感兴趣的行存储在与哈希中的 transaction-id 键关联的 arrayref 中。

use warnings;
use strict;
use feature 'say';    
use Data::Dump qw(dd);

my @fields = ('u 0 1', 'u 0 2');  
my $field_regex = join '|', map { quotemeta } @fields;
    
my (%trans, $tid);

while (<>) {
    chomp;
    if (/^t #/) { 
        $tid = $_; 
        next;
    }   
  
    push @{$trans{$tid}}, $_  if /$field_regex/;
}

dd %trans;

# foreach my $tid (sort keys %trans) { 
#     say $tid;
#     say for @{$trans{$tid}};
# }

I use while (<>)当调用程序时,它会逐行读取命令行上给出的所有文件(或STDIN),这里为了简单起见。我用Data::Dump显示复杂的数据结构;有Data::Dumper在核心。

The qotemeta https://perldoc.perl.org/functions/quotemeta.html转义所有 ASCI 非“单词”字符,这些字符可能会抛出正则表达式,其中包括空格。

上面的程序通常会丢失文件中 transaction-id 的顺序,因为散列键是无序的,而它保留每个 id 的行顺序,因为它们位于数组上。如果需要的话,这并不难补救。

仅使用提供的数据文件进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索与 Perl 中的所有正则表达式完全匹配的模式 的相关文章

随机推荐

  • 使一列填充 SlickGrid 中的剩余空间,而不会弄乱显式宽度的列

    我的一些列需要明确的宽度 而其他列则应该填满所有可用空间 有一个forceFitColumns选项 但它似乎忽略了我设置的任何显式宽度 我希望我的显式宽度得到尊重 并且隐式宽度得到合理估计 我想要得到这种行为 我必须禁用默认列宽并重写 au
  • 升级到 Visual Studio 2010 后使用“var”时出错

    我们最近刚刚从 VS2008 升级到 VS2010 我们的项目编译良好 但是当我们去运行 Web 应用程序时 打开 Default aspx 时会出现以下错误 应用程序中的服务器错误 编译错误描述 An 编译过程中出现错误 提供服务所需的资
  • Cs50 VScode ide 仅在恢复模式下运行

    每当我尝试打开 cs50 vscode 工作区时 它都会首先发出以下通知 由于容器错误 此代码空间当前正在恢复模式下运行 查看创建日志 根据需要更新您的 devcontainer 配置 然后运行 重建容器 命令来重试 然后预装的工具都不起作
  • 使用NaiveBayes算法的同时如何使用One-hot Encode?

    我正在尝试使用朴素贝叶斯算法来满足我的要求之一 在此 我计划对超平面使用 One hot Encode 我使用以下代码来运行我的算法 但是 我不确定如何使用 One hot Encode 请找到下面的代码 from sklearn prep
  • Android LocationManager.getLastKnownLocation() 返回 null

    因此 我尝试在应用程序中对 GPS 坐标进行一次采样 我不想创建 LocationListener 对象来不断获取 GPS 更新 我想等到收到坐标 然后继续执行另一项任务 这是一个代码片段 LocationManager lm Locati
  • 代码签名错误:应用程序未通过代码签名验证

    我对 iOS 开发非常陌生 我有一个应用程序已准备好并准备好分发 但每次我仅在我的设备上运行该应用程序时 我似乎都会收到此错误 iOS 模拟器工作得很好 这是完整的错误 应用程序未通过协同设计验证 签名无效 包含不允许的权利或未使用 iPh
  • 在SWI prolog中实现nth1列表操作

    您将如何在 Prolog 中编写您自己的谓词 以准确执行 nth1 函数的功能 对于那些不熟悉该功能的人 可以通过一个示例来最好地展示其功能 nth1 2 a b c E R E b R a c 当调用 nth1 函数时 传递以下内容 一个
  • 用于办公管理应用程序无缝集成(和最终替换)的复杂(多模式)实体框架对象映射

    我是一个相当新手 狂热的程序员 这是我的第一个问题 但几个月来我一直在使用 stackoverflow 来获取有价值的信息 首先 一些背景 我目前在一家极小 我们目前运行一个相当过时 大约 2008 年 的医疗办公室管理系统 负责处理患者业
  • 如何创建半透明(后面有内容)UITabBar

    我对 UITabBar 进行了子类化并重写了drawRect 方法以使其透明 并使其看起来像我需要的那样 我遇到的问题是添加到 UITabBarController 的视图没有覆盖整个屏幕 而是在底部上方 49 像素处结束 所以即使我有透明
  • 如何仅使用单个连接在 Npgsql 中执行多个查询?

    我在 npgsql 中创建了多个连接来执行多个查询 如下代码所示 class TransactionAccess private const string connString Host localhost Username postgre
  • 在 Chartist.js 中向 SVG 数据点添加轮廓

    我正在使用 Chartist js 只是想知道您是否可以帮助我对 SVG 应用一些样式 这是我的代码如下 jQuery new Chartist Line ct chart labels 1 2 3 4 5 6 7 8 series 5 9
  • ActiveRecord has_many :通过在批量分配时复制计数器缓存

    ActiveRecord 计数器缓存功能似乎会导致计数器缓存增加两次 我看到这种行为的场景是当我有两个模型时has many through通过连接模型相互建立关系 即 Teacher有很多Student通过Classroom 当使用has
  • 如何编写基于网络的音乐可视化工具?

    我正在尝试找到构建音乐可视化工具以在网络浏览器中运行的最佳方法 Unity 是一个选项 但我需要构建一个自定义音频导入 分析插件来获取最终用户的声音输出 Quartz 可以满足我的需要 但只能在 Mac Safari 上运行 WebGL 似
  • .net 与 Objective c SHA-512 不匹配

    我正在尝试编写用于从 net 函数在目标中创建 sha512 字符串的函数 该函数是 public static string GetSHA512 string strPlain UnicodeEncoding UE new Unicode
  • 在 Express REST API 中使用 OOP 的最佳方式?

    我将全力以赴并仅使用节点来做一个项目 这很有趣 但有时我会有点迷失其中 当我感到困惑时 我想尝试获得理解 这样我就可以正确地构建它 并且不会太不知所措 不管怎样 问题是这样的 我有使用 Express 和 mysql 的 REST API
  • Jackson Scala 模块的小例子?

    任何人都可以向我指出 Jackson 序列化 反序列化及其 2 10 的 Scala 模块的简单示例吗 我正在寻找基于反射的 JSON 不需要逐个字段注释或分配 这似乎可以做到这一点 但他们的文档不包含任何示例 如果我有一个案例类 case
  • 如何解压 .asar 文件?

    我使用以下命令打包了我的 Electron 应用程序 asar pack app app asar 现在 我需要解压它并取回整个代码 有什么办法可以做到吗 来自阿萨尔文档 https github com electron asar 指某东
  • 如何通过 Maven 使用 Netbeans 调试 Spring Boot

    经过很长时间的摆弄 直到我在 Netbeans 8 2 和 Spring Boot 1 4 3 中得到了正确的调试设置 我想我应该把我的发现写下来作为其他人的问答 问题是 Netbeans 的默认配置无法在调试模式下正确启动 Spring
  • Jetpack Compose:如何禁用浮动操作按钮?

    根据docs https developer android com reference kotlin androidx compose material package summary FloatingActionButton kotli
  • 检索与 Perl 中的所有正则表达式完全匹配的模式

    我有一个子图数据库 如下所示 t 3 231 1 v 0 94 v 1 14 v 2 16 v 3 17 u 0 1 2 u 0 2 2 u 0 3 2 t 3 232 1 v 0 14 v 1 94 v 2 19 v 3 91 u 0 1