簡體   English   中英

C#檢查字符是否在字符串中以固定順序出現

[英]C# check if characters occur in a fixed order in a string

我需要檢查用戶輸入是否類似於參數。 它以字符串形式(不可更改)出現,必須類似於以下示例:

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 []”。 等等

但是我不確定如何在不檢查每個字符並使用多個大小寫的情況下將其存檔...

也歡迎任何其他有關確保用戶輸入正確的想法。

您可以檢查輸入是否與正則表達式模式匹配:

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

如果只需要驗證應在提供的5個共振峰中的1個中輸入的用戶輸入,請使用正則表達式檢查:

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

正則表達式演示

說明

  • ^ -字符串開頭
  • (?: -交替組的開始
    • (?<p>[pr]\\d+) -組“ p”捕獲pr和1個或多個數字
    • (?:\\[(?<idx>\\d+)])? - [ ,1個或多個數字(捕獲到“ idx組”中,然后是] )的可選序列
    • (?:\\.(?<inword>\\d+)‌​)? -文字的可選序列. ,然后將1個或多個數字捕獲到“ inword”組中
  • | -或(然后是第二種選擇)
  • (?<simpleval>\\d+)‌​組“simpleval”捕捉1個或多個數字
  • ) -外部分組的結尾
  • $ -字符串結尾。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM