c# - C# 正则表达式:查找多个模式的所有匹配项
问题描述
我需要 C# 中的正则表达式的帮助,它可以识别字符串中出现了多少个预定义的 3 字母字符串。
因此,例如:
Regex.Matches("qwerty", @"(?i)(qwe|wer|ert|rty|tyu|yui|uio|iop|op\[|p\[\])")
将返回:
["qwe", "wer", "ert", "rty"]
(当然,上面的正则表达式是不正确的!)。
仅供参考,这是检查键盘上的 3 个连续字符是否出现在密码中(在上面的情况下"qwerty"
是密码。
谢谢 :)
编辑1:这需要不区分大小写。
解决方案
如果您只想使用美式键盘(请参阅 sm 评论),您可以尝试Linq而不是Regex:
using System.Linq;
...
string source = "qwerty";
// either put chunks to test direct
string[] chunks = new string[] {
"qwe", "wer", "ert", "rty", "tuy", "yui", "uio", "iop", "op[", "p[]", "[]\\"};
// ...or generate them as 3-grams:
// string line = "qwertyuiop[]\\";
// string[] chunks = Enumerable
// .Range(0, line.Length + 1 - 3)
// .Select(start => line.Substring(start, 3))
// .ToArray();
string[] appeared = chunks
.Where(chunk => source.IndexOf(chunk, StringComparison.OrdinalIgnoreCase) >= 0)
.ToArray();
Console.Write(string.Join(", ", appeared));
结果:
qwe, wer, ert, rty
推荐阅读
- python - Pandas 数据框中两列的差异
- symfony - 如何在 Symfony 中实现动态图表?
- r - R ggplot 如何使用来自几个不同列的数据绘制条形图?
- jenkins - 如何从 Groovy 代码中解析 Jenkinsfile
- node.js - 由 heroku 托管的 Discord js 机器人“错误:找不到模块 './rest/RESTManager'”
- python - 如何在 Django 中使用 Ajax 对列表视图进行排序?
- ruby-on-rails - 为什么我不能在控制台的 rails 项目的 app/decorator 文件夹中创建我创建的类的实例?
- c++ - 为什么协程的返回类型必须是可移动构造的?
- sql - MSSql - 根据另一个列值并排显示列
- javascript - Firebase“创建”触发器的云函数 - 多个集合