正则表达式问题。匹配字符串中的模式

时间:2018-12-30 21:18:27

标签: regex

如果具有以下模式,则基本上需要整个字符串都匹配:

数字空格词(最少1个,最多3个)。空格

因此以下字符串将是一个匹配项:

$ sed 's/^(\([^)]*\))\([^-]*\)-\(.*\)$/Area code: (\1) Second: \2- Third: \3/' file
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (777) Second: 555- Third: 1217

但是以下内容不匹配:

30 boxes 30 boxes 30 boxes boxes boxes 

注意:行中的最后一个字符是空格

到目前为止,我有以下正则表达式:

30 boxes 30 boxes boxes boxes boxes 30 boxes 

2 个答案:

答案 0 :(得分:1)

我建议使用

^(?:\d+(?:\s+[a-zA-Z]+){1,3}\s*)+$

请参见regex demo

它匹配

  • ^-字符串的开头
  • (?:\d+(?:\s+[a-zA-Z]+){1,3}\s*)+-一次或多次出现
    • \d+-1个或更多数字
    • (?:\s+[a-zA-Z]+){1,3}-出现一次,两次或三次
      • \s+-超过1个空格
      • [a-zA-Z]+-1个以上ASCII字母
  • \s*-超过0个空格
  • $-字符串的结尾。

答案 1 :(得分:1)

var s = "30 boxes 30 boxes boxes boxes boxes 30 boxes ";
var pattern = @"(?i)^(\d+(\s+[a-z]+\s*)+){1,3}$";
WriteLine($"Is match: {Regex.IsMatch(s, pattern)}"); // => Is match: true