正则表达式替换为最小长度的正面外观

时间:2018-04-05 12:38:12

标签: c# regex

我需要正则表达式匹配单词至少有一个字母和至少一个最小长度为7个字符的数字。

\b((?=.{7,15})[A-Z]+[0-9]+[A-Z0-9]*-?\d?)\b

然而,在字符串'MSW M19 6x14 4x100 ET38'中它匹配只有3个字符的M19。

3 个答案:

答案 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)

不确定你是否特别需要一个积极的前瞻,但这是一个没有使用前瞻的解决方案。

[a-zA-Z0-9]\w{6,}

enter image description here

https://regex101.com/r/mQIB9V/1