c# - 如何在 C# 中使用正则表达式构造一个简单的程序来检查部分匹配的输入
问题描述
我正在尝试创建一个类来使用正则表达式进行部分匹配。我基本上已经迷失了如何执行搜索。
输入将像“flour#yeast#banana”一样出现,其中 # 代表未知长度、未知的字母集合。搜索必须保持面粉_ _ _酵母_ _ _香蕉的顺序。所以比赛将包括
“面粉香蕉”
“flouraddyeastmashbanana”
“flouraddyeast香蕉”
但不是
“酵母花”
我想的正则表达式代码是@" ^[a - zA - Z] + $"
到目前为止我得到的是
static void Main(string[] args)
{
string[] input = "flour#yeast#banana".Split('*');
string[] searchblock = new string[4] { "flouryeastbanana", "flouraddyeastmashbanana", "flouraddyeastbanana", "yeastflourbanana" };
string pattern = @" ^[a - zA - Z] + $";
foreach (string s in searchblock)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine($" (match for '{pattern}' found)");
}
}
Console.ReadLine();
}
但我无法理解如何继续前进,也不知道如何让它搜索超过 1/0 的随机字母......所以我很确定我错了
解决方案
我只是用'*'
你的输入字符串替换(或者是'#'
吗?你的问题不清楚......叙述说的是一件事,代码暗示了另一件事),".*?"
然后使用整个字符串作为你的模式。例如:
static void Main(string[] args)
{
string input = "flour*yeast*banana";
string[] searchblock = new string[4] { "flouryeastbanana", "flouraddyeastmashbanana", "flouraddyeastbanana", "yeastflourbanana" };
string pattern = input.Replace("*", ".*?");
foreach (string s in searchblock)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine($"input \"{s}\": (match for '{pattern}' found)");
}
}
}
正则表达式中的序列".*?"
表示匹配任意数量的任意字符,尽可能少的字符仍然允许匹配成功。通过在输入字符串中使用它代替您的标记,这允许与您的非标记字符串由任何其他字符分隔的任何字符串匹配。
请注意,?
在您的情况下,字符串中的 可能是可选的。如果您多次使用包含非标记字符串的字符串呈现模式,则匹配发生的位置会产生细微的差别,但不应影响字符串是否实际匹配。因此,如果您愿意,您可能只使用".*"
作为替换文本而不是".*?"
.
推荐阅读
- xamarin - 创建模板时是否有任何理由使用后端 C# 初始化程序?
- reactjs - 具有外部图像纹理输入的 gl-react-expo 着色器
- c++ - 在 Active Directory 中使用 NetScheduleJobAdd 的计划作业不在客户端中运行
- python - SIGINT 在谷歌 pubsub_v1/python 中被忽略
- java - 计算互联网上搜索引擎的查询响应时间
- php - 如何避免 MySQL 查询结果中的重复?
- python - 删除非字母数字字符的正则表达式不起作用
- typo3 - TYPO3 后端 - 搜索 fe_users 的 first_name
- javascript - nodejs vs Chrome中的不同全局对象
- javascript - 如何将一个数组匹配到另一个数组但在javascript中保存匹配的元素