【问题标题】:c# Create custom patterns to search within a string, given custom rulesc# 创建自定义模式以在给定自定义规则的字符串中搜索
【发布时间】:2023-01-17 23:06:44
【问题描述】:

所以我有一个有趣的任务要完成。 用户基本上输入了一个长字符串,我需要查看给定字符串中是否包含子字符串。我们得到了 5 条规则——5 个子串,分别命名为 S1、S2、S3、S4、S5。

S1 应该是两位数,重复两次。

S2 应该是一个或多个小写字母——例如 abc、aaabc、a、abcd 等。

S3 应该是给定间隔中的几个字母 - a、b、c、d - 可以是 ab、ac、ad、 公元前等。

S4 应该是 3 个相同的数字 - 111、333、222 等。

S5 应与 S3 相同。

因此,用户应输入字符串并继续这样做,直到存在具有子字符串且匹配这 5 个条件的字符串。 例如:

::??!:1dasw88kqlbc333bclqpelk?-, 这里

s1 = 88

s2 = kql

s3 = 公元前

s4 = 333

s5 = 公元前。

模式是正确的。 我应该如何处理这个问题?我最初的想法是将我的字符串分组到一个字符数组中,然后开始将每个字符与下一个字符进行比较,直到我得到完美匹配,但这失败了,因为我不知道 s2 的大小。可能是 1,可能是 10,可能更多。 这个问题有更好更通用的方法吗?

谢谢你。

【问题讨论】:

  • 您是否考虑过使用正则表达式又名正则表达式?
  • 为什么不是 S2 = dasw?
  • 允许重叠吗?如果从测试字符串中删除 88,S1 将由 33 实现,但这也是 S4 实现的一部分。事实上,整个事情都可以通过 abc111 来完成。

标签: c#


【解决方案1】:

在 C# 中有多种方法可以解决此问题。一种方法是使用正则表达式将子字符串与输入字符串进行匹配。 C# 中的 Regex 类提供了使用正则表达式匹配和搜索字符串的方法。

例如,要匹配 S1,您可以使用以下正则表达式:

 string s1Pattern = @"(d{2})";

此模式匹配两个数字 (d{2}),然后匹配相同的两个数字 ()。

同样,您可以使用以下正则表达式来匹配 S2、S3、S4 和 S5:

 string s2Pattern = @"[a-z]+";
 string s3Pattern = @"[abcd]{2}";
 string s4Pattern = @"(d){2}";
 string s5Pattern = @"[abcd]{2}";

然后,您可以使用 Regex.IsMatch() 方法检查是否有任何子字符串与输入字符串匹配:

string input = "::??!:1dasw88kqlbc333bclqpelk?-";
    
if (Regex.IsMatch(input, s1Pattern) || Regex.IsMatch(input, s2Pattern)
 || Regex.IsMatch(input, s3Pattern) || Regex.IsMatch(input, s4Pattern) ||
Regex.IsMatch(input, s5Pattern))
 {
   Console.WriteLine("The pattern is correct.");
 }

如果这个答案有帮助,请点赞!

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2013-08-14
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多