如果具有以下模式,则基本上需要整个字符串都匹配:
数字空格词(最少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
答案 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