Return the number of format specifiers in string format_string. >>> count_format_specifiers("foo bar foo") 0 >>> count_format_specifiers("foo %d bar foo") 1 >>> count_format_specifiers("foo %d bar %i foo") 2 >>> count_format_specifiers("foo %d bar %i foo %% foo") 2
(format_string)
| 226 | |
| 227 | |
| 228 | def count_format_specifiers(format_string): |
| 229 | """Return the number of format specifiers in string format_string. |
| 230 | |
| 231 | >>> count_format_specifiers("foo bar foo") |
| 232 | 0 |
| 233 | >>> count_format_specifiers("foo %d bar foo") |
| 234 | 1 |
| 235 | >>> count_format_specifiers("foo %d bar %i foo") |
| 236 | 2 |
| 237 | >>> count_format_specifiers("foo %d bar %i foo %% foo") |
| 238 | 2 |
| 239 | >>> count_format_specifiers("foo %d bar %i foo %% foo %d foo") |
| 240 | 3 |
| 241 | >>> count_format_specifiers("foo %d bar %i foo %% foo %*d foo") |
| 242 | 4 |
| 243 | """ |
| 244 | assert type(format_string) is str |
| 245 | format_string = format_string.replace('%%', 'X') |
| 246 | n = 0 |
| 247 | in_specifier = False |
| 248 | for i, char in enumerate(format_string): |
| 249 | if char == "%": |
| 250 | in_specifier = True |
| 251 | n += 1 |
| 252 | elif char in "aAcdeEfFgGinopsuxX": |
| 253 | in_specifier = False |
| 254 | elif in_specifier and char == "*": |
| 255 | n += 1 |
| 256 | return n |
| 257 | |
| 258 | |
| 259 | def main(): |