我很难对正则表达式的各个部分进行分组。我想验证遵循以下格式的字符串中的一些内容:I-XXXXXX.XX.XX.XX
验证第一组6个X(I-xxxxxx.XX.XX.XX
)不包含字符,并且长度不超过6。
验证X的第三组(I-XXXXXX.XX.xx.XX
)不包含字符,并且仅包含1或2。
现在,我已经对最后一组XX进行了验证,以确保使用
的数字为1-8string pattern1 = @"^.+\.(0?[1-8])$";
Match match = Regex.Match(TxtWBS.Text, pattern1);
if (match.Success)
;
else
{ errMessage += "WBS invalid"; errMessage +=
Environment.NewLine; }
我只是想不出如何定位字符串的特定部分。任何帮助将不胜感激,并提前感谢您!
答案 0 :(得分:1)
您很难在此字符串中添加新的验证,因为它非常通用。让我们看看您在做什么:
^.+\.(0?[1-8])$
找到以下内容:
^
字符串的开头
.+
(除了换行符)所能做的所有事情,基本上都将引擎的光标跳到行尾
\.
字符串中的最后一个句点,这是因为.+
中的贪婪量词位于字符串之前
0?
为零(如果可以的话)
[1-8]
一个1到8之间的数字
()$
将先前的两个对象存储在一个组中,如果字符串的结尾不在此之后,它甚至可以回溯并尝试从第二个到最后一个周期进行相同的操作,我们知道这不是一个很好的策略。
这最终会匹配很多奇怪的东西,例如字符串The number 0.1
如果可以的话,让我们尝试模式化更具体的内容
^I-(\d{6})\.(\d{2})\.(\d{1,2})\.([1-8]{2})$
这将匹配:
^I-
在字符串开头的I和连字符
(\d{6})
六位数字,它存储在捕获组中
\.
一段。到现在为止,如果还有六位数以外的其他数字,则匹配失败,而不是尝试回溯整个位置。
(\d{2})\.
是一样的东西,只是两位而不是六位。
(\d{1,2})\.
同样,这里的逗号表示它可以匹配一位和两位数。
([1-8]{2})
两位数字,分别在1到8之间。
$
字符串的结尾。
我希望我能理解您在这里想要匹配的内容。让我知道这是否不是您的想法。
答案 1 :(得分:0)
此正则表达式:
^.-[0-9]{6}(\.[1-8]{1,2}){3}$
将验证以下内容:
{6}
替换为{3,6}
)。 / li>
有效字符串的示例是:
I-587954.12.34.56
这也是有效的:
I-587954.1.3.5
但这不是:
I-587954.12.80.356
因为倒数第二个组包含0,并且因为最后一个组的长度为3。
请让我知道我是否误解了任何规则。
答案 2 :(得分:0)
^I-([0-9]{1,6})\.(.{1,2})\.(0[1-2])\.(.{1,2})$
个以分隔的组。 (\。):
您可以在输入数据上编写并轻松测试正则表达式,只需使用Google“在线正则表达式”即可