如何忽略部分文本并在剩余部分进行搜索和替换? [复制]

2024-03-03

在文本文件中进行正则表达式查找和替换时,我想跳过并忽略文本的某些片段。也就是说,应该将文本的某些部分排除在搜索之外,而只对其余部分进行搜索和替换。标准是:

(1) 任何介于START and END应从搜索和替换中排除。START可能位于也可能不位于行的开头;END可能位于也可能不在行尾; 一对START & END可以跨越多条线;

(2) 内嵌注释中的任何内容//应该被忽略;//可能位于也可能不在行首;

(3) 之后的第一个词.应该被忽略;.可能位于也可能不位于行的开头; 该词可能紧随其后.或者用空格、换行符、制表符来分割它们。

示例代码:

#!/usr/bin/env perl
use strict;
use warnings;

$/ = undef;

#iterate the DATA filehandle
while (<DATA>) {
    # This one replaces ALL occurrences of pattern.
    s/old/new/gs;

    # How do I skip the unwanted segments and do the replace?
    #print all
    print;
}

##inlined data filehandle for testing. 
__DATA__
xx START xx old xx END xx   --> ignore
xx old xx                   --> REPLACE !
START xx old                --> ignore
      xx old xx END         --> ignore
      xx old xx             --> REPLACE !
// xx old                   --> ignore
xx // xx old                --> ignore
xx . old old xx             --> ignore first one, replace second one
.
  old                       --> ignore
  (old) xx                  --> REPLACE !
xx old xx                   --> REPLACE !

预期输出是:

xx START xx old xx END xx   --> ignore
xx new xx                   --> REPLACE !
START xx old                --> ignore
      xx old xx END         --> ignore
      xx new xx             --> REPLACE !
// xx old                   --> ignore
xx // xx old                --> ignore
xx . old new xx             --> ignore first one, replace second one
.
  old                       --> ignore
  (new) xx                  --> REPLACE !
xx new xx                   --> REPLACE !

有人可以帮我解决这里的正则表达式吗?几个小时前我发布了一个类似的问题,但该帖子充满了歧义,无法给出明确的答案。希望这篇文章可能是一个“好”且“明确”的问题。


您可以使用(*SKIP)(*F) verbs http://perldoc.perl.org/perlre.html#Special-Backtracking-Control-Verbs跳过某事。

(?:(?s:START.*?END)|\/\/.*|\.\s*\w+\b)(*SKIP)(*F)|old

它的工作原理如下:(?:part 1 to skip|part 2 to skip|...)(*SKIP)(*F) | part to match

  • (?:打开一个非捕获组 https://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group交替使用(?s: with s flag http://www.regular-expressions.info/modifiers.html使点匹配换行符
  • \w匹配一个单词字符 http://www.regular-expressions.info/shorthand.html [A-Za-z0-9_]
  • \b匹配一个字边界 http://www.regular-expressions.info/wordboundaries.html

请参阅 regex101 上的演示 https://regex101.com/r/yI0jH2/3

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

如何忽略部分文本并在剩余部分进行搜索和替换? [复制] 的相关文章

  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • grep 通过彩色文本,例如海湾合作委员会 |颜色gcc | grep 正则表达式

    在 grep 管道输出时 如何使 grep 尊重 ANSI 颜色转义 我很高兴使用其他东西 perl 而不是 grep 我的用户案例 我想要 gcc foobar c colorgcc grep regexp ls color grep f
  • Java 正则表达式中 \w 和 \b 的 Unicode 等效项?

    许多现代正则表达式实现解释 w字符类简写为 任何字母 数字或连接标点符号 通常 下划线 这样 正则表达式就像 w 匹配像这样的词hello l ve GO 432 or gefr ig 不幸的是 Java 没有 在爪哇 w仅限于 A Za
  • 删除emacs中多余的空行

    M x flush lines 删除缓冲区中的所有空白行 但是我只想删除多余的空白行 也就是说 如果有n个连续的空白行我想删除n 1并保留一个 我知道删除空白行可以完成该点下的空白行的工作 但是我想要一个适用于整个缓冲区的简单解决方案 有什
  • 正则表达式 - 将 target="blank" 添加到我的内容中的所有 标记链接

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

    我正在使用 Module Build 尽管我在构建环境上很灵活 来打包我正在编写的一些 Perl 软件 供我工作的内部使用 它包括一些脚本和一些辅助模块 我的计划是这样你就可以指定任何你想要的前缀 即perl默认值之外的东西 INC 在构建
  • vscode 中正则表达式的不完整量词

    我正在尝试为对象的开头创建一个正则表达式 以便我可以用单个替换完整的块 在vscode的查找和替换中 My Regex id oid 0 9 product id 0 9 我的示例输入 id oid 973 product id 973 p
  • 在 Google 表格应用程序中进行身份验证

    我有一个类似批处理的应用程序 由调度程序定期调用 无需人类用户参与 它使用 PerlNet Google 电子表格 http metacpan org pod Net Google Spreadsheets包通过从数据库获取的数据来更新 G
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何扩展路径中的波形符(~)[重复]

    这个问题在这里已经有答案了 我有一个 shell 脚本 可以从用户那里获取目录路径 但我需要检查目录是否为空 如果用户将他的主路径与 而不是绝对路径 所以我无法检查它ls echo Specify your project root dir
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 替换除引号内的逗号之外的逗号

    Date Time Ref Sen ATN Flow PCB temp Status Battery BC 2015 04 23 12 30 00 779581 908043 15 254 49 31 0 100 2015 04 23 12
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3

随机推荐

  • 从 python 脚本中使用游标输出参数调用 oracle 存储过程

    我正在尝试从 python 脚本调用带有 2 个输入和 1 个输出参数的 Oracle 存储过程 我遇到的问题是传递游标输出参数 Oracle 存储过程本质上是 PROCEDURE ci lac state LAC ID IN IN VAR
  • 使用 JavaScript 通过“阅读更多”和“阅读更少”截断文本

    如果我错误地提出了这个问题 或者如果之前有人问过并回答过这个问题 我很抱歉 我的搜索发现了类似的基于 JQuery 的问答 我正在寻找一个纯 JavaScript 解决方案 var len 100 var p document getEle
  • 使用 Fortuna PRNG 在计数器模式下使用 AES 进行随机访问加密:

    我正在构建基于 AES 的文件加密 该加密必须能够在随机访问模式下工作 访问文件的任何部分 例如 可以在 Counter 中使用 AES 但众所周知 我们需要一个不会使用两次的唯一序列 在这种情况下 可以使用简化的 Fortuna PRNG
  • 如何在 Angular 7 的表格上使用 Ngx-pagination

    嗨 我有一个清单 例如 0 姓名 Manu 年龄 21 爱好 Array 4 1 姓名 Anu 年龄 20 爱好 Array 3 2 姓名 nandu 年龄 22 爱好 Array 5 我需要在表格上显示这一点 所以我正在执行下面的代码 t
  • igraph - 邻居作为子图 - make_ego_graph() 作为单个图

    我想构造一个有向网络图的子图 其中所有顶点共享某个顶点属性 例如 V Grph year 1952 及其一阶 直接 邻居 基于仅在出度上 我试过了ego make ego graph neighbors and adjacent verti
  • 如何静默 cvxopt 求解器 [Python]?

    每当我在终端中运行 Python cvsopt 求解器时 它都会打印 pcost dcost gap pres dres 0 8 0742e 00 7 3715e 00 3e 03 5e 01 4e 15 1 6 6241e 01 7 28
  • 如何使用 dplyr 将函数应用于所有非 group_by 列?

    我正在尝试使用 dplyr 包将函数应用于 data frame 中未分组的所有列 我将使用aggregate aggregate Species data iris mean where mean应用于所有未用于分组的列 是的 我知道我可
  • 在 C# 中实现进度条的正确方法

    我正在学习 winforms 我给自己设定了一个简单的目标 即制作一个从空到满的进度条 这是我的畸形尝试 public partial class Form1 Form static BackgroundWorker bw new Back
  • Rails,使用控制器中文件的内容

    我有一个文件在config目录 比方说 my policy txt 我想在控制器中使用该文件的内容 就像使用简单的字符串一样 policy content of config my policy txt 如何实现这个目标 Rails是否提供
  • C 中函数指针语法的用途是什么?

    编辑 有人指出这个问题有点令人困惑 简短的版本是 为什么有一个单独的指针变量 例如 fnPtr 它指向一个函数 例如 fn 当函数名fn本身 没有参数 已经是一个指针 编辑 我正在尝试了解一些内容 并且可以使用社区有关函数指针的反馈 虽然这
  • iText 表格行距从右到左方向(阿拉伯语)

    我的应用程序是用英语和阿拉伯语两个不同版本开发的 我在 iText 中使用 rowspan 和 colspan 创建了 pdf 表 该表在英语版本中完美运行 但在阿拉伯语版本中 rowspan 不起作用 当我使用 setRunDirecti
  • 花式盒子 - 如何从单个缩略图显示幻灯片

    我的缩略图是分页的 因此任何一页上只有 6 个缩略图 大约 4 页 一个类别中总共 24 张图像 如果我将其设置在其中一个页面上 它只会显示该页面上的 6 个相关图像 如何使用 Fancybox 显示所有 24 张图像的幻灯片 提前谢谢了
  • 使用 moment.js 检查日期格式

    我正在从屏幕上的日历中获取这种类型的输入 DD MMM YYYY HH mm a 但用户可以从键盘提供日期 现在我必须检查用户是否以正确的格式提供了日期 我在我的应用程序中大量使用 moment js 并像这样验证它 if angular
  • 计算中位数移动平均单位成本时使用 Over(Partition By)

    早上好 我正在尝试计算特定仓库中每件商品的 12 个月移动平均成本 MAUC 我正在使用 2012 B 分页技巧来计算中位价格 http sqlperformance com 2012 08 t sql queries median htt
  • 在 Xcode 6.0.1 中使用仪器进行分析时应用程序挂起

    我观察到 每当我使用 Xcode 6 0 1 中的工具分析我的应用程序时 每次浏览应用程序时应用程序都会挂起 我正在使用 iPhone 5S iOS 8 0 2 来运行我的应用程序 当我在设备上运行该应用程序时 它运行得很好 找到修复 禁用
  • 使用 php 将事件插入谷歌日历

    如何将活动插入 Google 日历 我正在使用本指南 https developers google com google apps calendar v3 reference events insert https developers
  • 在android上使用ormlite删除?

    我有一个客户端 bean DatabaseField columnName client id generatedId true useGetSet true private Integer clientId DatabaseField c
  • 如何在网页视图中播放本地 swf 文件

    我正在尝试在 webview 中播放本地 swf 文件 保存在 asset 或 sdcard 中 但我没有运气 任何人都可以指导我正确的方法吗 我可以通过 url 播放 swf 文件 但是在 webview 中播放本地文件时遇到困难 swf
  • 如何使用 gson 库将字符串转换为 JsonObject

    请指教如何转换String to JsonObject using gson图书馆 我不成功的做法 String string abcde Gson gson new Gson JsonObject json new JsonObject
  • 如何忽略部分文本并在剩余部分进行搜索和替换? [复制]

    这个问题在这里已经有答案了 在文本文件中进行正则表达式查找和替换时 我想跳过并忽略文本的某些片段 也就是说 应该将文本的某些部分排除在搜索之外 而只对其余部分进行搜索和替换 标准是 1 任何介于START and END应从搜索和替换中排除