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[]."等
但我不知道如何存档,而不检查每个字符和使用多个案例…
关于如何确保用户输入是正确的任何其他想法也是受欢迎的。
如果您只需要验证用户输入,该用户输入应该来自提供的5个表单中的1个,则使用正则表达式检查:
Regex.IsMatch(str, @"^(?:(?<p>[pr]'d+)(?:'[(?<idx>'d+)])?(?:'.(?<inword>'d+))?|(?<simpleval>'d+))$")
查看regex演示
:
-
^
-字符串 起始 -
(?:
-交替组起始-
(?<p>[pr]'d+)
-组"p"捕获p
或r
和 后面的一个或多个数字 -
(?:'[(?<idx>'d+)])?
-[
的可选序列,1个或多个数字(捕获到组"idx"),然后]
-
(?:'.(?<inword>'d+))?
-.
的可选序列,然后1个或多个数字捕获到组"inword"
-
-
|
-或者(然后是第二种选择) -
(?<simpleval>'d+)
-组"simpleval"捕获1个或多个数字 -
)
-外部分组结束 -
$
- end of string.
如果p
或r
可以是任意 ASCII字母,则使用[a-zA-Z]
代替[pr]
。
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