允许在 C# 正则表达式模式中使用星号和问号
本文关键字:正则表达式 模式 | 更新日期: 2023-09-27 17:56:28
问题:在 C# 正则表达式模式中,我应该将*
、'*
或''*
放在何处以匹配目标中的星号?
'?
或''?
同上
详情...
我有一个允许这种输入的应用程序
- 一个或两个十六进制字符:
0-9
、a-f
或A-F
- 然后是一个强制性逗号:
,
- 然后是可选的空格(根据需要或多或少,或无):
速记描述...
0,
通过F,
以及00,
通过FF
,忽略字母的大小写。前后的可选空格是可以的。逗号是分隔所必需的,但不允许在末尾使用。(最后一个字符必须是空格或文本结尾)
之后,该模式可以根据需要重复。(空格不必平衡。
例。。。
00, F1, 33, A7, 21, 14, 0D, 0A, 30,30,30,31, 41, 3e,3e,3e, 41, 5A, 0
以下代码非常适合此...
private bool See_If_This_Input_Is_Okay(string The_Callers_Text)
{
String pattern = @"^'s*([0-9A-Fa-f]{1,2},'s*)*[0-9A-Fa-f]{1,2}'s*$";
bool matches = Regex.IsMatch(The_Callers_Text, pattern);
return (matches);
}
现在我希望模式适应...
- 一个或两个相邻的星号:
*
或**
,然后一个强制性逗号:,
- 一个或两个相邻的问号:
?
或??
,然后一个强制性逗号:,
速记描述...
0,
通过F,
或00,
通过FF
,或*,
或**,
或?,
或??,
(同样在每个字符串之前和之后[但不在]使用零到随机空格,强制使用逗号)
例。。。
00, ??, 33, A7, 21, 14, ?,?, 30,30,30,31, **, 3e,3e,3e, *, 5A, 0
在这里阅读了 20 或 30 个类似的帖子后,我仍然无法弄清楚将'*
和'?
序列放在pattern
字符串中的哪个位置。
我也尝试了''*
,但一无所获。
这包括在f
之后,在$
之前,在括号内的s*
(任何一个)之后,括号外;我想我可以对我的文本编辑器进行编程,以制作相关行的五十一个副本并尝试每个位置;但我真的想理解这一点,而不仅仅是让它发生。
如果有人能解释什么去哪里,谢谢,那就行了。我真正想知道的是在哪里解释和记录这一点。我将省略我访问过的十几个旨在解释这一点的网页。
感谢任何可以回答这个问题的人。
您的正则表达式中有两个字符类[]
。只需将*
和?
字符放在字符类中,它应该适合您。
^'s*([0-9A-Fa-f*?]{1,2},'s*)*[0-9A-Fa-f*?]{1,2}'s*$
^^ ^^
好吧,首先,您可以通过将分组更改为:
@"^'s*[0-9A-Fa-f]{1,2}(,'s*[0-9A-Fa-f]{1,2}'s*)*$"
现在,如果您也想允许*
和?
,您可以使用如下所示的内容:
@"^'s*([0-9A-Fa-f]{1,2}|'*'*?|'?'??)(,'s*([0-9A-Fa-f]{1,2}|'*'*?|'?'??)'s*)*$"
我基本上把[0-9A-Fa-f]{1,2}
改成了([0-9A-Fa-f]{1,2}|'*'*?|'?'??)
.
您也可以使用 RegexOptions.IgnoreCase
而不是使用 A-Fa-f
:
String pattern = @"^'s*([0-9A-F]{1,2}|'*'*?|'?'??)(,'s*([0-9A-F]{1,2}|'*'*?|'?'??)'s*)*$";
bool matches = Regex.IsMatch(The_Callers_Text, pattern, RegexOptions.IgnoreCase);