JavaScript (ES6), 89 ... 8684 8483 bytes / chars
s=>s[S='split']` `.map(s=>t+=([m,M,c]=s[S](/\W+\W/),k=s[S](c).length-2)>=m&k<=M,t=0)|t
Try it online!Try it online!
Commented
s => // s = input string s[S = 'split']`\n` // split it on line-feeds .map(s => // for each line s: t += // update t: ( [m, M, c] = // [m, M, c] = [min, max, char] obtained by ... s[S](/\W/), // ... splitting s on non-alphanumerical characters k = s[S](c) // k = number of occurrences of c in s, minus 1 .length - 2 // (so we have to subtract 2 from the length of the array) ) >= m & // increment t if k is greater than or equal to m k <= M, // and less than or equal to M t = 0 // starting with t = 0 ) | t // end of map(); return t