检查字符串的格式

本文关键字:格式 字符串 检查 | 更新日期: 2023-09-27 18:10:17

这个问题可能已经在之前的某个地方得到了回答,但是由于有数百万个关于字符串格式化的不相关的帖子。

取以下字符串:

24:(真,假,真的)(0,1,0)

在这种情况下,我希望能够做两件事。我需要检查以下所有条件是否都为真:

  • 只有一个:使用Split()实现,我需要使用它来分离两个部分。
  • :前面的整数为1-3位int简单int型。解析逻辑
  • []存在且至少包含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)*']$"