c#检查字符串中字符是否以固定顺序出现

本文关键字:定顺序 是否 检查 字符串 字符 | 更新日期: 2023-09-27 18:08:08

我需要检查用户输入是否类似于参数。它以字符串形式出现(不可更改),并且必须看起来像以下示例:

p123[2]      -> writable array index  
r23[12]      -> read only array index  
p3[7].5      -> writable bit in word  
r1263[13].24 -> read only bit in word  
15           -> simple value

允许用户输入其中的任何一个,我的函数必须区分它们以便调用适当的函数。

一个想法是检查特定顺序的字符,例如:"p[]","r[]","p[]."等

但我不知道如何存档,而不检查每个字符和使用多个案例…

关于如何确保用户输入是正确的任何其他想法也是受欢迎的。

c#检查字符串中字符是否以固定顺序出现

如果您只需要验证用户输入,该用户输入应该来自提供的5个表单中的1个,则使用正则表达式检查:

Regex.IsMatch(str, @"^(?:(?<p>[pr]'d+)(?:'[(?<idx>'d+)])?(?:'.(?<inword>'d+))?|(?<simpleval>'d+))$")

查看regex演示

:

  • ^ -字符串
  • 起始
  • (?: -交替组起始
    • (?<p>[pr]'d+) -组"p"捕获pr
    • 后面的一个或多个数字
    • (?:'[(?<idx>'d+)])? - [的可选序列,1个或多个数字(捕获到组"idx"),然后]
    • (?:'.(?<inword>'d+)‌​)? - .的可选序列,然后1个或多个数字捕获到组"inword"
  • | -或者(然后是第二种选择)
  • (?<simpleval>'d+)‌​ -组"simpleval"捕获1个或多个数字
  • ) -外部分组结束
  • $ - end of string.

如果pr可以是任意 ASCII字母,则使用[a-zA-Z]代替[pr]

c#演示:

var strs = new List<string> { "p123[2]","r23[12]","p3[7].5","r1263[13].24","15"};
var pattern = @"^(?:(?<p>[pr]'d+)(?:'[(?<idx>'d+)])?(?:'.(?<inword>'d+))?|(?<simpleval>'d+))$";
foreach (var s in strs)
    Console.WriteLine("{0}: {1}", s, Regex.IsMatch(s, pattern));

您可以检查输入是否与正则表达式模式匹配:

1 ) Regex.IsMatch(input,@"^p'd+'['d+']$"); // match p123[2] 
2 ) Regex.IsMatch(input,@"^r'd+'['d+']$"); // match r23[12] 
3 ) Regex.IsMatch(input,@"^p'd+'['d+']'.'d+$"); // match p3[7].5
4 ) Regex.IsMatch(input,@"^r'd+'['d+']'.'d+$"); // match r1263[13].24
5 ) Regex.IsMatch(input,@"^'d+$") ;// match simple value