Find regex match at index: regex_findall_index
The regex_findall_index template filter finds all occurrences of a regular expression (regex) pattern in a string and returns the match at a specific position (index). A regular expression is a special text pattern that describes what you are looking for. This filter is a shorthand for using regex_findall and then picking one result from the list by its index number.
This is useful when you know a sensor value or text contains multiple matches but you only need one specific one. For example, a sensor might report “23.5C / 45% humidity” and you want only the first number (temperature) or the second number (humidity). The index starts at 0 for the first match, 1 for the second, and so on.
Usage
Here’s how to use this template function. Copy any example and adjust it to your setup.
{{ "23.5C / 45% humidity" | regex_findall_index("\\d+\\.?\\d*") }}
23.5
Function signature
The signature is a technical summary of this template function. It shows the name of the function, the values (called parameters) it accepts, and what type of data each parameter expects (for example, a piece of text or a number).
Function parameters that have a = with a value after them are optional. If you leave them out, the default value shown is used automatically. Function parameters without a default are required.
regex_findall_index(
value: str,
find: str = "",
index: int = 0,
ignorecase: bool = False,
) -> str
Function parameters
The following parameters can be provided to this function.
The regular expression pattern to search for. All non-overlapping matches are found, and the one at the specified index is returned.
The position of the match to return, starting from 0 for the first match. Defaults to 0 (the first match).
Selecting different matches
Use the index parameter to pick which match you want from the results.
{{
"10:15 - 23.5C, 11:30 - 24.1C"
| regex_findall_index("\\d+\\.\\d+", index=0)
}}
{{
"10:15 - 23.5C, 11:30 - 24.1C"
| regex_findall_index("\\d+\\.\\d+", index=1)
}}
23.5
24.1
Good to know
- Indexing starts at 0 for the first match. Out-of-range indexes raise an error.
- Returns the string form of the match. For numbers, convert with
floatorintafterward.
Try it yourself
Ready to test this? Open Developer tools > Template, paste the example into the Template editor, and watch the result update on the right. Edit the values to see how the function adapts to your own entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more].
More examples
Real scenarios where this function comes up in automations and templates. Copy any example and adapt it to your setup.
Extract a specific value from a multi-part sensor
When a sensor returns a combined string with multiple values, pick the one you need.
{% set state = "Power: 150W | Voltage: 230V | Current: 0.65A" %}
Voltage: {{ state | regex_findall_index("\\d+\\.?\\d*", index=1) }}V
Voltage: 230V
Get the second word in a string
Extract the second capitalized word from a status message.
{{
"Status: Device Online Ready"
| regex_findall_index("[A-Z][a-z]+", index=1)
}}
Device
Parse a formatted date component
Extract a specific part from a formatted date string.
{% set date_str = "2024-03-15" %}
Month: {{ date_str | regex_findall_index("\\d+", index=1) }}
Month: 03
Still stuck?
The Home Assistant community is quick to help: join Discord for real-time chat, post on the community forum with your template and expected result, or share on our subreddit /r/homeassistant.
AI assistants like ChatGPT or Claude can also explain or fix templates when you describe what you want in plain language.
Related template functions
These functions work well alongside this one:
-
Find all regex matches: regex_findall - Finds all occurrences of a regular expression pattern in a string and returns them as a list.
-
Match a regex pattern: regex_match - Tests if a string matches a regular expression pattern at the beginning.
-
Search for a regex pattern: regex_search - Searches for a regular expression pattern anywhere in a string.
-
Replace using a regex pattern: regex_replace - Replaces all occurrences of a regular expression pattern in a string.