Keywords: lib

## 4.2.6 Examples

Simulating `scanf()`

Python does not currently have an equivalent to `scanf()`. Regular expressions are generally more powerful, though also more verbose, than `scanf()` format strings. The table below offers some more-or-less equivalent mappings between `scanf()` format tokens and regular expressions.

`scanf()` Token | Regular Expression
--- | ---
`%c` | `.`
`%5c` | `.{5}`
`%d` | `[-+]?\d+`
`%e`, `%E`, `%f`, `%g` | `[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE]\d+)?`
`%i` | `[-+]?(0[xX][\dA-Fa-f]+|0[0-7]*|\d+)`
`%o` | `0[0-7]*`
`%s` | `\S+`
`%u` | `\d+`
`%x`, `%X` | `0[xX][\dA-Fa-f]+`

To extract the filename and numbers from a string like

          /usr/sbin/sendmail - 0 errors, 4 warnings

you would use a `scanf()` format like

          %s - %d errors, %d warnings

The equivalent regular expression would be

          ([^\s]+) - (\d+) errors, (\d+) warnings