我将向打印机发送一些这种格式的命令。
{AA00:00;|}
{AAB08:02;|}
其中{始终是第一个字符,}始终是结束字符,|始终是最后一个字符。在这些之间我会有特定的命令AA00:00;这可能会有所不同。
我想在正则表达式中检查这些格式,我是regex的新手,我们将不胜感激。
答案 0 :(得分:3)
我误读了你对数字的评论,并且认为逗号是可以接受的。
尝试这种模式
"^{[A-Z]+\\d+:\\d+;\\|}$"
故障:
^
- 行的开头{[A-Z]+
- 一个以1个或多个大写字母后跟的空心括号\\d+
- 一个或多个号码:
- 冒号角色;
- 分号字符\\|}
- 竖线字符后面跟着括号$
- 行尾代码示例:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string[] commands =
{
"{AA00:00;|}",
"{ABC0:93;||}",
"{AAB08:02;|}",
"{123AA:AA;|}",
"{AA123,123:123,123;|}"
};
foreach (string command in commands)
{
if (Regex.Match(command, "^{[A-Z]+\\d+:\\d+;\\|}$").Success)
{
Console.WriteLine("Good command");
}
else
{
Console.WriteLine("Bad command");
}
}
}
}
结果:
Good command
Bad command
Good command
Bad command
Bad command
答案 1 :(得分:2)
更容易理解的模式怎么样?
^{[A-Z]+\d+:\d+;\|}$";
^
- 行的开头,不会在文本中移动(搜索); {
- 文字大括号。[A-Z]+
集[ ]
A-Z中的大写字母,其中一个或多个+
\d+
一个数字(0-9)\d
,其中一个或多个+
:
- 字面冒号\d+
一个数字(0-9)\d
,其中一个或多个+
;
- 字面分号\|
- 为正则表达式解析器转义的文字管道,而不是C#解析器}
- 文字大括号。$
- 数据中正则表达式解析的结束; 注意我使用+
因为它避免了*
(零或更多)的问题,因为我们可以提供正则表达式解析器的提示越多,它执行得越快。 1或更多优于零或更多,因为它可能导致解析器回溯其他可能的组合。我们希望尽可能简洁。
<强>代码强>
var pattern = @"^{[A-Z]+\d+:\d+;\|}$";
var commands = new List<string>()
{
"{AA00:00;|}", // Good
"{ABC0:93;||}", // Bad too many '|'
"{AAB08:02;|}", // Good
"{123AA:AA;|}", // Bad can't start with a number
"{1111:11;|}", // Bad
"{*A11:11;|}", // Bad
"{AA123,123:123,123;|}" // Bad can't have a comma
};
commands.Select (cmd => string.Format("{0,-25} : {1}",
cmd,
Regex.IsMatch(cmd, pattern) ? "Valid" : "Not Valid"))
.ToList()
.ForEach(result => Console.WriteLine (result));
<强>结果强>
{AA00:00;|} : Valid
{ABC0:93;||} : Not Valid
{AAB08:02;|} : Valid
{123AA:AA;|} : Not Valid
{1111:11;|} : Not Valid
{*A11:11;|} : Not Valid
{AA123,123:123,123;|} : Not Valid
答案 2 :(得分:0)
您可以使用此正则表达式:{\w{2}\d{2}:\d{2};\|}
\w{2}
:此模式找到两个alfanumeric chars; \d{2}
:此模式找到两个数字字符; \|
:此模式找到字符&#34; |&#34;。