检查字符串的格式
本文关键字:格式 字符串 检查 | 更新日期: 2023-09-27 18:10:17
这个问题可能已经在之前的某个地方得到了回答,但是由于有数百万个关于字符串格式化的不相关的帖子。
取以下字符串:
24:(真,假,真的)(0,1,0)
在这种情况下,我希望能够做两件事。我需要检查以下所有条件是否都为真:
- []存在且至少包含1个整数。另外,确保[]中的元素是整数,用 分隔
我怎样才能做到最好?编辑:我已经把我目前取得的成绩划掉了。
正则表达式是最快的方法。根据复杂度的不同,它也可能是计算成本最高的。
这似乎做你需要的(我不是很好,所以可能有更好的方法做到这一点):
^'d{1,3}:'w{1,9}'((true|false)(;true|;false)*')'['d(,['d])*']$
'd{1,3}
1 ~ 3位数字
:
后面接冒号
'w{1,9}
后接1-9字符字母数字字符串,
'((true|false)(;true|;false)*')
后接包含"true"或"false"的括号,后接任意数量的";true"或";false",
'['d(,['d])*']
后面是另一组包含数字的括号,后面是任意数量的逗号+数字。
字符串开头和结尾的^和$表示字符串的开始和结束,这很重要,因为我们试图验证整个字符串是否匹配格式。
代码示例
var input = "24:Something(true;false;true)[0,1,0]";
var regex = new System.Text.RegularExpressions.Regex(@"^'d{1,3}:.{1,9}'(.*')'['d(,['d])*']$");
bool isFormattedCorrectly = regex.IsMatch(input);
Credit @ Ian Nelson
在这种情况下,你唯一合理的选择就是使用正则表达式。
我草率的尝试如下:
var input = "24:Something(true;false;true)[0,1,0]";
var regex = new System.Text.RegularExpressions.Regex(@"^'d{1,3}:.{1,9}'(.*')'['d(,['d])*']$");
System.Diagnostics.Debug.Assert(regex.IsMatch(input));
这个在线RegEx测试器应该可以帮助改进表达式。
我认为,最好的方法是像这样使用正则表达式:
string s = "24:Something(true;false;true)[0,1,0]";
Regex pattern = new Regex(@"^'d{1,3}:[a-zA-z]{1,10}'((true|false)(;true|;false)*')'['d(,'d)*']$");
if (pattern.IsMatch(s))
{
// s is valid
}
如果你想在()中包含任何内容,你可以使用以下regex:
@"^'d{1,3}:[a-zA-z]{1,10}'([^:'(]*')'['d(,'d)*']$"