我需要正则表达式匹配单词至少有一个字母和至少一个最小长度为7个字符的数字。
\b((?=.{7,15})[A-Z]+[0-9]+[A-Z0-9]*-?\d?)\b
然而,在字符串'MSW M19 6x14 4x100 ET38'中它匹配只有3个字符的M19。
答案 0 :(得分:0)
((?=.\w{6,})[A-Z]+[0-9]+[A-Z0-9]*-?\d?)
答案 1 :(得分:0)
如果真的需要正则表达式,可以使用
var results = Regex.Matches(s, @"\b(?=\w*\p{L})(?=\w*\d)\w{7,15}\b");
请参阅regex demo。请注意,如果您只想支持ASCII大写字母和ASCII数字,请将\w
替换为[A-Z0-9]
,将\d
替换为[0-9]
,将\p{L}
替换为[A-Z]
<强>详情
\b
- 字边界(?=\w*\p{L})
- (或(?=[0-9]*[A-Z])
) - 在0+字符之后(或在0 + ASCII数字之后)至少需要一个字母的正向前瞻(?=\w*\d)
- (或(?=[A-Z]*[0-9])
) - 在0+字符之后(或在0 + ASCII大写ASCII字母之后)需要至少一个diigt的正向前瞻\w{7,15}
- 7到15个单词字符(注意它包含_
,您可以使用[\w-[_]]{7,15}
将其排除在外)\b
- 尾随(此处)字边界否则,如果你只是想要按长度和字母和数字的存在过滤空格分隔的块,请使用
var results = s.Split().Where(x => x.Length >= 7 && x.Any(char.IsDigit) && x.Any(char.IsLetter))
答案 2 :(得分:0)