【问题标题】:C# check if characters occur in a fixed order in a stringC#检查字符串中字符是否以固定顺序出现
【发布时间】:2016-09-21 09:53:34
【问题描述】:

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

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# string character


【解决方案1】:

如果您只需要验证应该来自提供的 5 个共振峰之一的用户输入,请使用正则表达式检查:

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

regex demo

说明

  • ^ - 字符串开头
  • (?: - 交替组的开始
    • (?&lt;p&gt;[pr]\d+) - 组“p”捕获 pr 和 1 个或多个数字后
    • (?:\[(?&lt;idx&gt;\d+)])? - [ 的可选序列,1 个或多个数字(捕获到组“idx”中),然后是 ]
    • (?:\.(?&lt;inword&gt;\d+)‌​)? - 文字 . 的可选序列,然后将 1 个或多个数字捕获到“inword”组中
  • | - 或(然后是第二种选择)
  • (?&lt;simpleval&gt;\d+)‌​ - 组“simpleval”捕获 1 个或多个数字
  • ) - 外部分组结束
  • $ - 字符串结束。

如果pr 可以是任何 ASCII 字母,请使用[a-zA-Z] 而不是[pr]

C# demo:

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));

【讨论】:

  • 非常感谢!像魅力一样工作。
【解决方案2】:

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

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

【讨论】:

  • 或者,如果您想一次检查所有内容:((?&lt;readWrite&gt;p|r)(?&lt;name&gt;\d+)\[(?&lt;index&gt;\d+)\](\.(?&lt;word&gt;\d+))?)|(?&lt;simpleValue&gt;\d+)。然后你只需要检查组。
  • 是的,取决于用户输入的方式。
  • 谢谢,结合上一篇文章对我帮助很大
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多