12345678910111213141516171819202122232425262728293031 |
- import re
- def extract_mentions(message: str, triggerChar: str = "@"):
- # Escape triggerChar in case it's a regex special character
- triggerChar = re.escape(triggerChar)
- pattern = rf"<{triggerChar}([A-Z]):([^|>]+)"
- matches = re.findall(pattern, message)
- return [{"id_type": id_type, "id": id_value} for id_type, id_value in matches]
- def replace_mentions(message: str, triggerChar: str = "@", use_label: bool = True):
- """
- Replace mentions in the message with either their label (after the pipe `|`)
- or their id if no label exists.
- Example:
- "<@M:gpt-4.1|GPT-4>" -> "GPT-4" (if use_label=True)
- "<@M:gpt-4.1|GPT-4>" -> "gpt-4.1" (if use_label=False)
- """
- # Escape triggerChar
- triggerChar = re.escape(triggerChar)
- def replacer(match):
- id_type, id_value, label = match.groups()
- return label if use_label and label else id_value
- # Regex captures: idType, id, optional label
- pattern = rf"<{triggerChar}([A-Z]):([^|>]+)(?:\|([^>]+))?>"
- return re.sub(pattern, replacer, message)
|