Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >包含由OR条件分隔的多个规则的正则表达式中命中的条件数

包含由OR条件分隔的多个规则的正则表达式中命中的条件数
EN

Stack Overflow用户
提问于 2013-05-20 10:53:42
回答 4查看 647关注 0票数 0

我有一个带OR条件的正则表达式。我想要找出正则表达式中用'|‘分隔的所有条件中满足的条件数。

示例:(.*Begin.*)|(.*Middle.*)|(.*End.*)

我还有一个类似于:"Hello this is Begin.Hello this is Middle."的字符串

现在,如果您看到正则表达式中的3个或条件中有2个将在此规则中命中。我想找出命中的条件数。

我不想根据'|‘拆分正则表达式,然后分别应用每个正则表达式,我希望一次运行整个正则表达式。

在我们搜索的字符串中,子匹配的顺序并不总是Begin--> order ->End。这是一个完全随机的字符串,我们在其中应用正则表达式,其中包含组合到一个正则表达式中的条件。我想知道Regex中有多少这样的条件被击中了。

EN

回答 4

Stack Overflow用户

发布于 2013-05-22 17:12:28

简而言之,使用标准交替是不可能的。文本一旦匹配,就不能再匹配了。此外,一旦满足表达式,它将不会继续搜索。如果正则表达式试图匹配每一个可能的排列,它们将是非常无效的,没有人会使用它们。

虽然我能找到的文档中没有明确地解决你的问题,但它在回溯的主题下涵盖了。请参阅MSDN的Backtracking with Optional Quantifiers or Alternation Constructs

本质上,您的备选列表(.|.|.)为回溯创造了一个机会。如果第一个替换项不匹配,则将尝试第二个替换项。但是,这种回溯不会发生,除非第一个替代失败,并且一旦进行匹配,所有其他替代都将被忽略。

如果你想匹配多个表达式,你可以像这样使用lookahead:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string l_pattern = @"(?i)" + /*make the regex case-insensitive*/
                   @"(?=(?<Cond1>.*?Begin)+)?" +
                   @"(?=(?<Cond2>.*?Middle)+)?" +
                   @"(?=(?<Cond3>.*?End)+)?";

string l_input = "Oops - I put the middle first!" + 
                 "Hello this is Begin.This is another begin.";

var l_match = Regex.Match( l_input, l_pattern );

Console.WriteLine( "Cond1 matched {0} times.",
                   l_match.Groups["Cond1"].Captures.Count );
Console.WriteLine( "Cond2 matched {0} times.",
                   l_match.Groups["Cond2"].Captures.Count );
Console.WriteLine( "Cond3 matched {0} times.",
                   l_match.Groups["Cond3"].Captures.Count );

Console.ReadKey( true );

这将输出:

Cond1匹配2次。

Cond2匹配1次。

Cond3匹配0次。

Lookahead不捕获任何文本,因此它们的功能有点像regex中的一个迷你正则表达式。从本质上讲,这个表达式与单独运行所有三个表达式没有什么不同。(请注意,每个lookahead都是可选的,否则如果任何一个lookahead失败,整个表达式都会失败。)

还请注意,当使用lookaheads时,如我所示,顺序并不重要。

有关lookaheds的更多信息,请参阅MSDN的Zero-width positive lookahead assertions。这个话题有点太大了,不能完全回答这个问题。

我不能说我推荐这种方法超过所有其他方法-如果你不熟悉正则表达式,它可能很难维护,而且它不一定是最有效的模式,但它符合你声明的需求。

票数 2
EN

Stack Overflow用户

发布于 2013-05-20 11:27:27

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Regex regexObj = new Regex("Begin|Middle|End");
allMatchResults = regexObj.Matches(subjectString);
numberOfMatches = allMatchResults.Count
票数 0
EN

Stack Overflow用户

发布于 2013-05-20 11:28:04

如果正则表达式片段与互斥的语言集匹配(或者更弱但更难验证的条件是它们与输入字符串中不重叠的子字符串匹配),则可以找到所有匹配项并计算构成字符串中匹配项的捕获组的数量。

如果正则表达式片段与重叠的子字符串匹配,那么最简单的方法是尝试将每个正则表达式片段与字符串和计数进行匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16647940

复制
相关文章
用Python进行单元测试
Python编程语言,不仅仅在机器学习、数据分析等领域大放异彩,在web开发中等软件开发中,使用者也越来越多。
老齐
2021/04/19
3.2K0
用Python进行单元测试
对 React 组件进行单元测试
前端开发的一个特点是更多的会涉及用户界面,当开发规模达到一定程度时,几乎注定了其复杂度会成倍的增长。
江米小枣
2020/06/16
4.3K0
用MockMvc对Spring mvc中的controller层进行单元测试
参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm
克虏伯
2019/04/15
2.6K0
[译] 对 Vue-Router 进行单元测试
原文:https://medium.com/js-dojo/unit-testing-vue-router-1d091241312
江米小枣
2020/06/15
2.2K0
如何对机器学习代码进行单元测试?
本文介绍了一种用于机器学习代码的单元测试方法,通过生成数据输入、模型推理、损失计算和优化等步骤,来确保每个组件只在一个步骤中起作用。作者还提供了相应的测试用例和代码示例,以帮助读者更好地理解单元测试的实现过程。同时,作者也提醒读者,单元测试并非万能的,需要结合其他测试方法来全面评估机器学习代码的性能和正确性。
企鹅号小编
2018/01/09
2.5K0
如何对机器学习代码进行单元测试?
如何对 Jenkins 共享库进行单元测试
Jenkins 共享库是除了 Jenkins 插件外,另一种扩展 Jenkins 流水线的技术。通过它,可以轻松地自定义步骤,还可以对现有的流水线逻辑进行一定程度的抽象与封装。至于如何写及如何使用它,读者朋友可以移步附录中的官方文档。
LinuxSuRen
2019/05/29
2.2K0
ASP.NET Core 对Controller进行单元测试
单元测试对我们的代码质量非常重要。很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试。我所在的公司没见过一个对Controller写过测试的。今天来演示下如果对Controller进行单元测试。以下内容默认您对单元测试有所了解,比如如何mock一个接口。在这里多叨叨一句,面向接口的好处,除了能够快速的替换实现类(其实大部分接口不会有多个实现),最大的好处就是可以进行mock,可以进行单元测试。
MJ.Zhou
2020/06/23
2K0
对 WordPress 主题进行单元测试(Theme Unit Test)
在制作 WordPress 的过程中,除了对整体的结构等进行排版布局等,还必须要对正文的内容和其他地方进行修饰和排版,例如正文中可能出现的 标题(h2、h3)、列表(ul、ol)、表格(table) 以及不同的文章类型效果等等。这就是 WordPress 主题的单元测试(Theme Unit Test)。
Denis
2023/04/15
1.9K0
用程序对hdfs进行操作。
调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中执行的。
用户5166556
2019/04/16
4620
用QUnit对Razor进行测试
Given how central JavaScript is to many modern web applications,  it is important to use unit tests to drive the design and quality of that JavaScript. But I’ve noticed that there are a lot of developers that don’t know where to start.
javascript.shop
2019/09/04
6350
用QUnit对Razor进行测试
如何对Spring MVC中的Controller进行单元测试
对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。 具体来讲,是由Spring框架中的spring-test模块提供的实现,详见MockMvc。
编程随笔
2022/04/29
2.3K0
用LogParser对IIS 日志进行分析
LogParser 是一个命令行工具,可以通过SQL 语句对日志进行分析统计,LogParser功能非常的强大,不但可以分析IIS日志,还可以分析系统事件日志,CSV,XML等格式日志,同时LogParser还支持编程接口,LogParser的帮助文档里自带了一个使用C#查询系统日志的例子。下面给出LogParser的下载地址。 基本的用法如下: LogParser –i:输入文件的格式 –o:输出格式 “SQL语句” 例如下面的例子是用Log Parser统计访问整个IIS站点的IP,及访问次数: log
张善友
2018/01/30
1.9K0
如何对类中的protected方法进行单元测试
也许很多同学写单元测试时遇到这样的问题,一个类方法是 protected ,如何测呢 ? 当然,你可以说把 protected 改成 public 就可测了!没错,是可测了,可是 ......
跑马溜溜的球
2020/12/07
4K0
用Prometheus对业务服务进行监控
这里分享一个用于黑盒监控的blackbox_exporter, 可以用于对http,https,tcp,dns以及ICMP协议进行探测,从而抓取数据进行监控。但是,这些对于我们来说究竟能解决什么用处。
公众号: 云原生生态圈
2021/11/15
1.7K0
用Prometheus对业务服务进行监控
用ranger对hive metastore 进行授权管理
hive standalone metastore 3.1.2可作为独立服务,作为spark、flink、presto等服务的元数据管理中心,然而在现有的hive授权方案中只有针对hiveserver2的授权,所以本文针对hive standalone metastore独立服务使用ranger对连接到hive metastore的用户进行授权访问,以解决hive standalone metastore无权限验证问题。
从大数据到人工智能
2022/01/15
1.8K0
用ranger对hive metastore 进行授权管理
用Python对MySQL同步状态进行监
使用Python对MySQL数据库服务器是否可访问,及主从同步是否中断进行监控,是一件非常简单的事情。感谢Python给我们带来了如此简单,强大,快捷的开发环境。
py3study
2020/01/08
9700
点击加载更多

相似问题

用Jest对EventEmitter进行单元测试

13

用MrUnit对作业进行单元测试

12

用ICommand对NSubstitute进行单元测试

11

用超时对HttpClient进行单元测试

10

用Rebus对CorrelationId进行单元测试

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文