在 .NET 正则表达式中,将零宽度正前瞻断言与其他搜索项相结合

2024-01-02

我需要解析一个具有多行标题、任意数量的多行详细信息和多行页脚的文件。每个细节都以一个模式开始,页脚也以一个模式开始。假设每个细节都以“detail”开头,页脚以“footer”开头,我可以通过以下方式成功找到每个细节:(?s)detail.*?(?=(detail|footer)),接下来是下一个细节或页脚。

我的问题是我希望一个正则表达式查找包含特定单词的详细信息,而另一个正则表达式查找不包含该单词的详细信息。第二个正则表达式不是问题,因为我正在循环文件,如果我在当前偏移量处找不到第一个正则表达式,我会尝试第二个正则表达式,这样第二个正则表达式就不需要指定“和”不包含这个词”。

我知道我可以简单地使用(?s)detail.*?(?=(detail|footer)),然后查看该单词是否在该匹配项中,但我正在使用不允许更改逻辑的现有框架。

我对第一个正则表达式所做的尝试导致了包含多个详细信息的匹配,直到找到包含该单词的匹配。如果在下一个“详细信息”或“页脚”之前找不到该单词,我会需要匹配失败。

例如,如果文件包含:

header bla bla
bla bla
detail one bla
bla bla
detail two bla
bla bla SpecialWord bla
footer
bla bla

当准备好找到第一个细节时,我希望第一个正则表达式失败,因为第一个“细节”和第二个“细节”之间没有 SpecialWord 以使第二个细节成功,返回:

detail one bla
bla bla

但是,我的失败尝试导致了正则表达式匹配:

detail one bla
bla bla
detail two bla
bla bla SpecialWord bla

如何制作一个以“详细信息”开头,在下一个“详细信息”或“页脚”之前结束,并且其中有 SpecialWord 的正则表达式?对于示例中的第一个详细信息,它将失败(因为 SpecialWord 不在第一个“详细信息”和第二个“详细信息”之间),而对于第二个详细信息,它将成功(因为 SpecialWord 在第二个“详细信息”和“页脚”之间。

任何帮助,将不胜感激。


您可以从细节开始匹配该行。然后继续匹配所有不以详细信息或页脚开头或包含 SpecialWord 的行。

然后匹配包含 SpecialWord 的行,然后匹配不以细节或页脚开头的其余行。

^detail\b.*(?:\r?\n(?!detail\b|footer\b|.*\bSpecialWord\b).*)*\r?\n.*\bSpecialWord\b.*(?:\r?\n(?!detail\b|footer\b).*)*

解释

  • ^行首
  • detail\b.*匹配细节和线条的其余部分
  • (?: Non capture group
    • \r?\n(?!detail\b|footer\b|.*\bSpecialWord\b).*如果不以页脚详细信息开头或包含 SpecialWord,则匹配该行
  • )*关闭组并重复 0 次以上以匹配所有这些行
  • \r?\n.*\bSpecialWord\b.*匹配包含 SpecialWord 的行
  • (?: Non capture group
    • \r?\n(?!detail\b|footer\b).*如果不以详细信息或页脚开头,则匹配该行
  • )*关闭组并重复 0 次以上以匹配所有这些行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET 正则表达式中,将零宽度正前瞻断言与其他搜索项相结合 的相关文章

  • 如何用该单词的单一版本替换重复单词

    我正在尝试使用 C 处理似乎使用语音转文本的文字记录 我遇到的一个主要问题是重复单词和 或短语 我很想使用正则表达式来替换它们 这里有些例子 我我我真的很想去 但是我不去 去不了 我真的很想使用正则表达式替换 所以它会变成这样 我真的很想去
  • 正则表达式查找两个字符之间的内部匹配

    环境 Java 我想匹配两个字符串之间的字符 这是一个例子 foo
  • 在 foreach 循环中启动一个新线程

    我有一个对象列表 我想循环该列表并启动一个新线程 传入当前对象 我写了一个我认为应该这样做的例子 但它不起作用 具体来说 线程似乎在每次迭代中都被覆盖 但这对我来说并没有什么意义 因为我每次都会创建一个新的 Thread 对象 这是我写的测
  • 通过 TCP/.NET SSLStream 发送文件很慢/无法正常工作

    我正在编写一个与 SSL 配合使用的服务器 客户端应用程序 通过SSLStream 它必须做很多事情 不仅仅是文件接收 发送 目前 它的工作原理是 只有一个连接 我总是使用从客户端 服务器发送数据SSLStream WriteLine 并使
  • 如何有效地左填充字节数组

    假设我有一个数组 LogoDataBy byte 0x00000008 0x00000000 0x41 0x00000001 0x42 0x00000002 0x43 0x00000003 0x44 0x00000004 0x31 0x00
  • 开始使用 TDD?

    我们正处于尝试实施 TDD 的初始阶段 我演示了 Visual Studio Team System 代码覆盖率 TDD 工具 团队对这种可能性感到兴奋 目前我们使用 Devpartner 进行代码覆盖 但我们希望消除它 因为它很昂贵 我们
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • VS Code 多行搜索和替换 HTML / XML 标签? [复制]

    这个问题在这里已经有答案了 如何搜索可能包含多个非空行的开始和结束标记
  • 重写方法时,我的自定义代码应该位于 super(base) 之前还是之后

    重写方法时 我的自定义代码应该在对父类的超级 基 调用之前还是之后 这里有 3 个选择 如果你想执行代码之前的基本行为 然后之前调用它 如果你想执行代码后的基本行为 然后调用它 如果你想完全覆盖基本行为 根本不调用它 重要的是还检查您的 A
  • 在 .NET 中解析 FIX 协议消息的最有效方法是什么?

    我碰到这个非常相似的问题 https stackoverflow com questions 2311205 the best way to parse a fix message但该问题被标记为 QuickFIX 与我的问题无关 并且大多
  • 关于 ColorMatrix 转换如何工作的说明

    我正在图像处理应用程序上做一些工作 为了好玩 并且正在努力完全理解 ColorMatrix 转换的工作原理 我了解了线性 仿射变换的基础知识 并且可以通过在线复制示例来很好地理解 但我想完全掌握why有些东西有效 而不是仅仅满足于它有效 例
  • MEF 或 MEF2 是否已融入 .NET Framework 中?

    我正在尝试了解 MEF 并且看到对 MEF 和 MEF 2 的引用 This site http www palmmedia de blog 2011 8 30 ioc container benchmark performance com
  • Lambda 变量名 - 为短名称,还是不为短名称? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通常 当我使用 lambda 时 我只使用 a b c d 作为变量名称 因为类型很容易推断 而且我发现短名称更易于阅读 这是一个例子 var
  • 通过 Active Directory 搜索进行有效分页

    在 NET 中使用 Active Directory 搜索进行分页的有效方法是什么 在 AD 中进行搜索的方法有很多 但到目前为止我找不到如何有效地进行搜索 我希望能够表明Skip and Take参数并能够检索结果中与我的搜索条件匹配的记
  • 异步回调到BackgroundWorker

    我想使用 NET FTP 库 http netftp codeplex com http netftp codeplex com 该库提供 BeginOpenRead string AsyncCallback object 使用异步编程模型
  • Node.js 和 .net 之间的命名管道通信

    我正在研究 net v4 5 2 和 Javascript node js v8 9 0 应用程序之间的进程间通信 我想为此使用 Windows 命名管道 并且仅限命名管道 对于 Javascript 应用程序 我使用的是命名管道包 v0
  • GridView必须添加到表单标签中才能渲染

    TextWriter tr new StringWriter HtmlTextWriter writer new HtmlTextWriter tr HtmlForm form new HtmlForm form Controls Add
  • 如何将 Activator.CreateInstance 与字符串一起使用?

    在我的反射代码中 我的通用代码部分遇到了问题 特别是当我使用字符串时 var oVal object Test var oType oVal GetType var sz Activator CreateInstance oType oVa
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 在一个数据库请求中连接 IQueryable 集合

    我使用实体框架 我需要连接两个集合 例如 IQueryable

随机推荐

  • 在 asp.net mvc 中以编程方式中止 OutputCache 持续时间

    我使用 OutputCache 属性在服务器端缓存操作的 html 输出 很好 它有效 但现在我遇到的情况是内容很少发生变化 但当发生变化时 用户在下一个请求时看到新数据至关重要 那么 有没有办法以编程方式中止页面缓存持续时间 是的 可以使
  • 为什么上标数字的 Unicode 字符显示高度不一样?

    为什么 Unicode 数字上标的显示高度不一样 如果您用上标数字组成两位数 这一点尤其明显 其中一些看起来不错 但其余的看起来彼此格格不入 我错过了什么吗 或者事实就是如此 Like jrturton https stackoverflo
  • 可编程地通过扬声器发出和播放声音 C++

    我正在用本机 vc 不是 Net 制作游戏 我正在寻找一种通过真正的扬声器 不是内部扬声器 播放噪音 可能是 8 位或其他 的方法 我了解 PlaySound 但我不想让我的 EXE 变大 我想对声音进行编程 是否有一种 api 方式 有点
  • PHPExcel:如何设置单元格的日期格式

    我需要将日期保存到 Excel 文件 它必须以 dd mm yyyy 格式 或用户的本地日期格式 输出 并被视为日期 以便其中的一列可以正确排序 这是代码
  • 如何捕获另一个进程的未处理异常?

    我想修改或仅加载 NET 可执行文件 然后处理其未处理的异常 我的目标是制作一个可以发送堆栈跟踪的智能处理程序 假设另一个可执行文件是 NET 应用程序 将其加载到新的AppDomain http msdn microsoft com en
  • Selenium 2.50 不适用于 Firefox 45

    我在使用 Firefox 和 webdriver 时遇到错误 45000 毫秒后无法通过端口 7055 连接到主机 127 0 0 1 火狐版本 45 0 硒 2 50 1 Windows 10 64 位 有没有人遇到类似的问题或知道解决方
  • 实施的标签系统中的错误

    我按照 Hartl 的教程制作了一个带有标记系统的 ToDoList 也借助了这个单词指南 https medium com sherzelsmith add a filtering multiple tag system with aut
  • C# - SSL 与 Websphere MQ 版本 7.0.1

    使用 C 连接到启用 SSL 的队列管理器时 需要设置哪些值才能使队列正常工作 我目前收到此错误 原因代码 2393 MQRC SSL INITIALIZATION ERROR 在我的代码中 我设置 MQEnvironment SSLKey
  • 结帐页面上的返回购物车按钮

    有什么解决方案可以显示 返回购物车 WooCommerce 结帐页面上的按钮 实际上只有一个完整的订单按钮 但是如果用户想要更正他的订单 我们需要一个后退按钮 Thanks 是的 可以在结帐页面上使用 返回购物车 按钮显示自定义通知 这是自
  • Powershell / VSTS 构建 - 独立存储凭据/与用户运行脚本无关

    我正在尝试为构建创建一个脚本 用于签出文件 编辑文件并将其重新签入 我希望它在作为开发人员或构建代理运行时能够工作 我有一个类似的解决方案this https stackoverflow com a 25455769 852806 密码存储
  • 将大型本地数据库与服务器数据库同步(MySQL)

    我需要每周将大型 3GB 40 表 本地 MySQL 数据库同步到服务器数据库 这两个数据库完全相同 本地数据库不断更新 大约每周服务器数据库都需要使用本地数据更新 您可以将其称为 镜像数据库 或 主 主 但我不确定这是否正确 目前数据库仅
  • 编辑 swf 文件中的动作脚本

    我已经尝试了 10 个小时来编辑这个 swf 文件 它看起来与反编译器中的预期完全一样 但是当我将其导出到闪存时 它是一个空白画布 并且我无法访问操作脚本 我想做的只是在动作脚本中编辑一些东西 我什至不碰电影 有没有更简单的方法来做到这一点
  • Android Studio,logcat 在应用程序关闭后清理

    自从 Android Studio 更新 1 2 Beta 以来 我的 logcat 遇到了问题 当我运行我的应用程序时 它会像平常一样记录所有内容 然后我的应用程序崩溃了 应用程序说 不幸的是 游戏已停止 几秒钟后 Android 会关闭
  • 使用 Jquery 更改页面标题

    如何进行动态变化
  • trac-admin /path/to/myproject initenv

    我的 Trac 有问题 我无法创建新项目 在这里 在 path to myproject 中 我应该写什么来代替它 事实上 我的项目路径是 C Users Programmer BitNami Trac Stack 项目 每次它在 BitN
  • C# 析构函数的使用示例

    我正在阅读有关 C 中的析构函数的内容 但我无法为其找到合适的用例 有人可以提供一个用法示例并进行解释吗 非常非常感谢 Update书中的代码示例实现了 Destructor 和 Dispose 方法 请参阅书中的代码片段 class My
  • Pandas 按索引计数分组和排序

    假设我有这个数据框 d Path abc abc ghi ghi jkl jkl Detail foo bar bar foo foo foo Program prog1 prog1 prog1 prog2 prog3 prog3 Valu
  • Spark union 因嵌套 JSON 数据帧而失败

    我有以下两个 JSON 文件 name Agent1 age 32 details d1 1 d2 2 name Agent2 age 42 details 我带着火花读了它们 val jsonDf1 spark read json pat
  • GWT + Google 地图 API v3

    我的 GWT 项目中需要 Google Maps API v3 调用 更具体地说 是 Google 地图和 DirectionServices 等地点的自动完成功能 我们已经尝试了 2 种方法来获取 v3 访问权限 但没有一种方法令人满意
  • 在 .NET 正则表达式中,将零宽度正前瞻断言与其他搜索项相结合

    我需要解析一个具有多行标题 任意数量的多行详细信息和多行页脚的文件 每个细节都以一个模式开始 页脚也以一个模式开始 假设每个细节都以 detail 开头 页脚以 footer 开头 我可以通过以下方式成功找到每个细节 s detail de