.net - 如果一个正则表达式匹配组值在另一个匹配组值内,正则表达式不会返回所有组?
问题描述
正则表达式:
(?<lang2>this\s*is\s*a\s*test\s*string)|(?<lang1>test)
示例文本:
this is a test string
如果您单独运行这些命名的捕获组,则会在具有值的匹配组中产生结果。但是如果你像上面写的那样运行它,那么它会返回 1 组而不是 2 组。我需要抓住这两个群体。所以输出组应该是这样的:
匹配组 1:“这是一个测试字符串”
匹配组 2:“测试”
解决方案
在您的模式中,您使用一个交替,它将捕获第一个捕获组中的整个字符串,之后交替部分不再匹配。
您可以嵌套捕获组而不是使用交替。
(?<lang2>this\s*is\s*a\s*(?<lang1>test)\s*string)
推荐阅读
- linq - 通过 linQ 查询多对多关系并过滤结果/通过 LINQ 获取动态数据
- content-security-policy - 有没有办法为 CSP 阻止的 iframe 创建后备页面?
- node.js - chrome远程接口ECONNREFUSED 127.0.0.1:9222
- javascript - 如何在触摸设备上单独悬停和点击或移除点击
- c# - 如何设置委托参数的值以用于后续调用而不每次都提供它们?
- javascript - 量角器新手并使用 Visual Studio 代码并在命令行上获取它
- reactjs - 自定义开发者门户以将 api 发布时间放在 devprortal 的概述中
- arrays - 查找具有不等间距范围的表
- r - 可以在具有在该数据框中定义的变量的数据框中调用 eval 吗?
- html - 我的第一个 div 上有大约 20 像素的空白区域。如何在不破坏页面布局的情况下删除它?