diff options
author | 2022-02-22 23:47:09 +0000 | |
---|---|---|
committer | 2022-02-24 17:32:47 +0000 | |
commit | 060bad105dc2569fc485adb03b985aa2ab5d367e (patch) | |
tree | 05b218472ee306d1d2faeb121a21c1e2d6de9fe7 /botcore/utils/regex.py | |
parent | Add markdown powered changelog (diff) |
Move new utilities to the util namespace
Diffstat (limited to 'botcore/utils/regex.py')
-rw-r--r-- | botcore/utils/regex.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/botcore/utils/regex.py b/botcore/utils/regex.py new file mode 100644 index 00000000..036a5113 --- /dev/null +++ b/botcore/utils/regex.py @@ -0,0 +1,48 @@ +"""Common regular expressions.""" + +import re + +DISCORD_INVITE = re.compile( + r"(discord([.,]|dot)gg|" # Could be discord.gg/ + r"discord([.,]|dot)com(/|slash)invite|" # or discord.com/invite/ + r"discordapp([.,]|dot)com(/|slash)invite|" # or discordapp.com/invite/ + r"discord([.,]|dot)me|" # or discord.me + r"discord([.,]|dot)li|" # or discord.li + r"discord([.,]|dot)io|" # or discord.io. + r"((?<!\w)([.,]|dot))gg" # or .gg/ + r")([/]|slash)" # / or 'slash' + r"(?P<invite>[a-zA-Z0-9\-]+)", # the invite code itself + flags=re.IGNORECASE +) +""" +Regex for discord server invites. + +:meta hide-value: +""" + +FORMATTED_CODE_REGEX = re.compile( + r"(?P<delim>(?P<block>```)|``?)" # code delimiter: 1-3 backticks; (?P=block) only matches if it's a block + r"(?(block)(?:(?P<lang>[a-z]+)\n)?)" # if we're in a block, match optional language (only letters plus newline) + r"(?:[ \t]*\n)*" # any blank (empty or tabs/spaces only) lines before the code + r"(?P<code>.*?)" # extract all code inside the markup + r"\s*" # any more whitespace before the end of the code markup + r"(?P=delim)", # match the exact same delimiter from the start again + re.DOTALL | re.IGNORECASE # "." also matches newlines, case insensitive +) +""" +Regex for formatted code, using Discord's code blocks. + +:meta hide-value: +""" + +RAW_CODE_REGEX = re.compile( + r"^(?:[ \t]*\n)*" # any blank (empty or tabs/spaces only) lines before the code + r"(?P<code>.*?)" # extract all the rest as code + r"\s*$", # any trailing whitespace until the end of the string + re.DOTALL # "." also matches newlines +) +""" +Regex for raw code, *not* using Discord's code blocks. + +:meta hide-value: +""" |