检索与 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 中的所有正则表达式完全匹配的模式 的相关文章

  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 使用通配符分割字符串

    我有一个变量字符串 其中包含我需要的值和拆分器 问题是 字符串的长度是可变的 分割器的类型也是可变的 它们通过 XML 文件到达 字符串将如下所示 1 20 51 2 name jpg 但也可以是 1 20 51 name jpg 坚实的因
  • 如何使用正则表达式将多个
    标签替换为一个
    标签?

    I want br br 变成 br 正则表达式的模式是什么 注 br 标签可以连续出现两次以上 html preg replace br gt s i br html 这将捕获任何组合 br br or br 它们之间有任意数量或类型的空
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • Python 正则表达式中的 \B+ 与 [\B]+ 与 [^\b]+

    我在回答 SO 问题时遇到了一个我不明白的问题 我创建了一个简化的示例来说明该问题 场景 我正在测试两个标记 不是随机的英语单词 在字符串中至少相距一定距离 在这个例子中 我们有一个动物列表 我们要确保在羊和狼之间至少还有其他三种动物 否则
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • 正则表达式 - 将 target="blank" 添加到我的内容中的所有 标记链接

    有人可以帮我在 C net 中创建一个正则表达式来添加target blank to all a 在我的内容中标记链接 如果链接已经设置了目标 则将其替换为 blank 目的是在新窗口中打开我的内容中的所有链接 感谢你的帮助 dotnet岩
  • 打包 Perl 应用程序,以便它可以在 Perl 的默认前缀之外工作

    我正在使用 Module Build 尽管我在构建环境上很灵活 来打包我正在编写的一些 Perl 软件 供我工作的内部使用 它包括一些脚本和一些辅助模块 我的计划是这样你就可以指定任何你想要的前缀 即perl默认值之外的东西 INC 在构建
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 如何扩展路径中的波形符(~)[重复]

    这个问题在这里已经有答案了 我有一个 shell 脚本 可以从用户那里获取目录路径 但我需要检查目录是否为空 如果用户将他的主路径与 而不是绝对路径 所以我无法检查它ls echo Specify your project root dir
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 替换字符串/文本中“从第 n 次到最后一次”出现的单词

    这个问题以前曾被问过 但尚未得到令提问者满意的答案 https stackoverflow com questions 36368712 how to use stringrs replace all function to replace
  • 在 Perl 中如何用空格填充字符串的一部分?

    你更喜欢哪个版本 usr bin env perl use warnings use strict use 5 010 my p 7 33 my prompt my key very important text my value Hell

随机推荐

  • 使一列填充 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