我就拆你的问题分为两个步骤:
在你的情况,我会分裂Clipboard.GetText()
所有非字母数字的字符:
string[] splitArray = Regex.Split(Clipboard.GetText(), @"[^a-zA-Z\d]+");
foreach (string s in splitArray)
{
// process s
}
然后为每个分割字符串s
,适用,只有符合其至少有一个字母(?=.*[a-zA-Z])
,至少一个数字(?=.*\d)
字符串,正好是7个字符长的正则表达式^[a-zA-Z\d]{7}$
:
new Regex(@"^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{7}$");
实施例:
Regex regex = new Regex(@"^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{7}$");
string[] splitArray = Regex.Split(Clipboard.GetText(), @"[^a-zA-Z\d]+");
foreach (string s in splitArray)
{
if (regex.IsMatch(s))
{
// s is a valid service tag
}
}
鉴于INP ut "123ABCD, ABCDEFG... ABCD123, 123AAAAAAAA"
,splitArray
将等于["123ABCD", "ABCDEFG", "ABCD123", "123AAAAAAAA"]
。
regex.IsMatch(s)
对于s
"123ABCD"
和"ABCD123"
将返回true。
你可以发布一些包含服务标签的示例输入吗?给我们一些额外的文本可以帮助我们捕获正确的子串并避免不需要的位。服务标签是否始终只有CAPS和数字? – mickmackusa