正则表达式包括结果中应该是非捕获组的内容

2023-11-22

我有以下简单的测试,我试图获取正则表达式模式,以便它提取不带“.exe”后缀的可执行文件名称。
 
看来我的非捕获组设置(?:\\.exe)不起作用或者我误解了它的工作原理。
 
Both regex101 and 正则风暴网显示相同的结果,前者确认“(?:\.exe)”是非捕获匹配。
 
对我做错了什么有什么想法吗?

// test variable for what i would otherwise acquire from Environment.CommandLine
var testEcl = "\"D:\\src\\repos\\myprj\\bin\\Debug\\MyApp.exe\" /?"
var asmName = Regex.Match(testEcl, @"[^\\]+(?:\.exe)", RegexOptions.IgnoreCase).Value;
// expecting "MyApp" but I get "MyApp.exe"

我已经能够通过使用定义了组名称的匹配模式来提取我想要的值,如下所示,但我想了解为什么非捕获组设置方法不能按我预期的方式工作。

// test variable for what i would otherwise acquire from Environment.CommandLine
var testEcl = "\"D:\\src\\repos\\myprj\\bin\\Debug\\MyApp.exe\" /?"
var asmName = Regex.Match(Environment.CommandLine, @"(?<fname>[^\\]+)(?<ext>\.exe)", 
    RegexOptions.IgnoreCase).Groups["fname"].Value;
// get the desired "MyApp" result

/eoq


A (?:...)是一个非捕获群,匹配并且仍然consumes文本。这意味着该组匹配的文本部分仍会添加到整体匹配值中。

一般来说,如果你想匹配某些东西但不消费,你需要使用环顾四周。因此,如果您需要匹配后面带有特定字符串的内容,请使用积极的前瞻, (?=...)构造:

some_pattern(?=specific string) // if specific string comes immmediately after pattern
some_pattern(?=.*specific string) // if specific string comes anywhere after pattern

如果您需要匹配但之前“从匹配中排除”某些特定文本,请使用积极的后视:

(?<=specific string)some_pattern // if specific string comes immmediately before pattern
(?<=specific string.*?)some_pattern // if specific string comes anywhere before pattern

注意.*? or .*- 也就是说,模式*, +, ?, {2,}甚至{1,3}量词 - 在后向模式中,正则表达式引擎并不总是支持它们,但是,C# .NET 正则表达式引擎幸运地支持它们。 Python PyPi 也支持它们regex模块、Vim、JGSoft 软件以及现在的 ECMAScript 2018 兼容 JavaScript 环境。

在这种情况下,您可以捕获您需要获取的内容并仅匹配上下文而不捕获:

var testEcl = "\"D:\\src\\repos\\myprj\\bin\\Debug\\MyApp.exe\" /?";
var asmName = string.Empty; 
var m = Regex.Match(testEcl, @"([^\\]+)\.exe", RegexOptions.IgnoreCase);
if (m.Success)
{
    asmName = m.Groups[1].Value;
}
Console.WriteLine(asmName);

See the C# demo

Details

  • ([^\\]+) - 捕获组 1: 一个或多个字符以外的字符\
  • \.- 一个字面点
  • exe- 字面意思exe子串。

由于我们只对捕获第 1 组内容感兴趣,因此我们捕获m.Groups[1].Value,而不是全部m.Value(其中包含.exe).

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

正则表达式包括结果中应该是非捕获组的内容 的相关文章

  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 在 omp 并行 for 循环中使用 unique_ptr 会导致 SEG.FAULT

    采取以下代码 include
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 我可以在 VIM 或 Perl 中替换单个正则表达式中的多个项目吗?

    假设我有字符串 The Quick Brown Fox Jumps Over the Lazy Dog 我可以用一个正则表达式将其更改为 The Slow Brown Fox Jumps Over the Energy Dog 吗 目前 我
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 在运算符重载中使用可变参数模板是否合法?

    我希望能够写一些这样的东西 struct bar template
  • 终止 postgresql 会话/连接

    如何终止所有 postgresql 连接 我正在尝试一个rake db drop但我得到 ERROR database database name is being accessed by other users DETAIL There
  • 如何通过 MockMvc 使用构造函数注入来测试控制器

    我有一个带有构造函数注入的控制器 RestController RequestMapping user public class MainController private final UserMapper userMapper auto
  • 读取 HTML 对象标签中的数据

    我有一个存储在服务器上的文本文件和一个 HTML 格式的对象 如下所示 我怎样才能阅读内容test txt在 JavaScript 中 到目前为止我所拥有的是 var data document getElementByID data 但我
  • 如何实现单实例Java应用程序?

    有时我看到许多应用程序 例如 msn Windows Media Player 等 它们都是单实例应用程序 当用户在应用程序运行时执行时 不会创建新的应用程序实例 在 C 中 我使用Mutex类 但我不知道如何在 Java 中执行此操作 我
  • 信封上邮票的最大值

    邮票问题是一个数学谜语 它询问如果信件只能容纳有限数量的邮票 并且这些邮票可能只有某些指定的面值 那么不能放在信封上的最小邮资价值是多少 例如 假设信封只能容纳三张邮票 可用的邮票面值为 1 美分 2 美分 5 美分和 20 美分 那么解就
  • Ef Linq 查询超时,但在 SSMS 上相同查询不到 1 秒

    首先我尝试过ARITHABORT OFF在 SSMS 上仍然不到 1 秒 我使用 EntityFrameWork 6 1 3 和 Azure Sql S1 层 我将尝试使用第 3 层 如果有变化 请通知您 我使用 EF Profiler 从
  • 如何列出最近24小时内有数据变化的所有表?

    我们遇到了一个丑陋的问题 平衡器错误地将一些请求重定向到具有与生产数据非常相似的数据的测试实例 现在我知道测试 Postgres 中记录了属于生产的数据 有没有办法列出Postgres中过去24小时内有数据更改的所有表 Postgres 版
  • 基于高效 2D Tile 的照明系统

    在 Java 中为基于图块的引擎进行照明最有效的方法是什么 是否会在图块后面放置黑色背景并更改图块的 Alpha 或者放置一个黑色的前景并改变它的阿尔法 还是其他什么 This is an example of the kind of li
  • iOS动态高度UITableViewCell和heightForRowAtIndexPath

    我在一个大型项目中为我的新 UITableViewCells 使用自动布局 我有一个 TableView 其中每一行的高度是自动计算的 我不使用委托函数heightForRowAtIndexPath 我已经声明了估计的行高 tableVie
  • 如何将.dll导入Android java项目(使用eclipse)

    Java 本机接口 JNI Java 本机接口 JNI 是其中之一 java 的有趣界面使用 Java 本机接口 JNI 可以与其他应用程序一起运行 和图书馆 JNI 是 java 的本机编程接口 是 JDK 的一部分 使用 JNI 您可以
  • 在 Dart 中,使用 new 关键字和直接调用构造函数有什么区别?

    我看到我可以使用 argument MyClassName a b 也 argument new MyClassName a b 我想明白的是newDart 中可选 或者这两个返回完全不同的东西 Dart 2 0 强模式下new 和 con
  • Twig_Error_Syntax 表示“未知过滤器”,在 Timber 中带有 Twig 过滤器

    这一定很简单 但我看不出有什么问题 我正在使用简单的过滤器示例https twig symfony com doc 1 x advanced html filters使用 Timber 中的 Twig 1 34 这是一个 WordPress
  • 如何使用 Android 版 Glide 压缩和降低图像质量

    我正在使用 Glide 库上传图像 在另一个应用程序中 我使用此代码 void imageButtonclick iv1 setOnClickListener new View OnClickListener Override public
  • 在分页函数中使用 limit 参数

    是否可以在 paginate 函数中使用 limit 参数 我正在尝试这个 users gt where gt limit 50 gt paginate page 现在 如果数据库中有 100 个用户 那么 paginate 函数的响应将是
  • Android HILT SingletonComponent 与 GoF Singleton 实例设计模式

    在 Android 项目中 有一个外观作为单例实现 我认为使用 HILT SingletonComponent 将其转换为 DI 是一个更好的主意 Module InstallIn SingletonComponent class obje
  • 获取 WindowRef 的边界?

    我正在尝试找到一个 Carbon API 它可以从窗口 id 中为我提供 WindowRef 并且通过该 windowref 我想要有边界吗 编辑 我找到了API extern WindowRef HIWindowFromCGWindowI
  • Skylake L2 缓存通过减少关联性增强?

    In 英特尔的优化指南在第 2 1 3 节中 他们列出了 Skylake 中缓存和内存子系统的许多增强功能 重点是我的 Skylake微架构的缓存层次结构有以下 增强功能 与前几代相比 缓存带宽更高 通过扩大的缓冲区可以同时处理更多的负载和
  • 有什么区别stdint h and cstdint 它们都可以在 MSVC Visual Studio 2010 和 gcc 4 5 1 中使用 并且两者都定义了intX t uintX t类型 其中X是类型的大小 以位为单位 如果两个标头
  • 正则表达式包括结果中应该是非捕获组的内容

    我有以下简单的测试 我试图获取正则表达式模式 以便它提取不带 exe 后缀的可执行文件名称 看来我的非捕获组设置 exe 不起作用或者我误解了它的工作原理 Both regex101 and 正则风暴网显示相同的结果 前者确认 exe 是非