bmt*_*033 6 c# regex linq string validation
如果我有这样的字符串......
"123[1-5]553[4-52]63244[19-44]"
Run Code Online (Sandbox Code Playgroud)
...验证以下条件的最佳方法是什么:
正则表达式是否能够验证所有这些场景?如果没有,LINQ怎么样?
因为您不允许嵌套,所以可以使用正则表达式:
^([^[\]]*\[[^[\]]*\]){0,3}[^[\]]*$
Run Code Online (Sandbox Code Playgroud)
说明:
(...){0,3} 最多匹配三组以下内容:
[^[\]]* 匹配可选的非括号字符\[匹配 [打开一个组[^[\]]* 匹配组内可选的非括号字符\]匹配]以关闭组[^[\]]*在所有组之后匹配更多可选的非括号字符执行此操作的最快方法是迭代字符串
bool Validate(string input)
{
int braceBalance = 0;
int openCount = 0;
for (int i = 0; i < input.Length; i++)
{
if (input[i] == '[')
{
braceBalance++;
openCount++;
}
if (openCount > 3) return false; // More than 3 pairs
if (input[i] == ']') braceBalance--;
// Check for nesting:
if (braceBalance < -1 || braceBalance > 1) return false;
}
return (braceBalance == 0); // Check for equal number of opening and closing
}
Run Code Online (Sandbox Code Playgroud)
RegEx和Linq都会有比这更大的开销(尽管取决于你的应用程序,这可能无关紧要).
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |