Here are several approaches **to match a digit n times with regex in Python**:

## Step 1: Match digits exactly n times

Let’s say that you want **to find a digit sequence with exact length of n**. If so then you can use the regex format `\D(\d{4})\D`

- to match 4 digits in a string.

Example:

```
import re
text = 'abcd123efg123456_1234ghij'
re.findall(r"\D(\d{4})\D", text)
```

will find:

```
['1234']
```

How does it work?

`\d{4}`

- match 4 digits exactly`\D`

- match non-digit character

So it will match a non digit character. Then will search for 4 digits followed by a non digit character. If so will extract only the 4 digits.

## Step 2: Match digits n times or more

What if you like to e**xtract sequence of digits n times or more**? We can use a syntax like: `\d{3,}`

- which is going to extract 3 consecutive digits or more:

```
import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"(\d{3,})", text)
```

This will result into:

```
['523', '123456', '1234']
```

What if you like to extract whole words or digits surrounded by spaces? Then you can use `\b`

which is used for a boundary as:

```
import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\b(\d{3,})\b", text)
```

output:

```
['123456', '1234']
```

## Step 3: Match digits n or m times

**To find sequence of digits with length 3 or 6 then you can try with**: `r"\d{3}|\d{6}"`

.

Important note: the order of matching the n and m times digits matters. To demonstrate that let's check the following examples:

```
import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\d{3}|\d{6}", text)
```

result:

```
['523', '123', '456', '123']
```

while:

```
import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\d{6}|\d{3}", text)
```

result:

```
['523', '123456', '123']
```

So if you like to get the longer sequence then you need to place the higher frequency first.

## Step 4: Match digits n times starting with something

Finally let's check the case where you would like **to find n digits starting with some pattern**. This can be achieved by next example - where we will extract exactly 3 digits preceded by a letter:

```
import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"[a-z](\d{3})", text)
```

result:

```
['523', '123']
```

and one more example about 3 letters preceded by non letter character:

```
import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"[^a-z](\d{3})", text)
```

result:

```
['234', '123']
```