# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"\[\[hero:([^:\]]*):?.*\]\]"
test_str = ("<div id=\"HeroesChanges\">\n"
" [[hero:abaddon]]\n"
" [[patchnote]] Aphotic Shield cast point reduced from 0.4 to 0.3\n"
" [[patchnote]] Borrowed Time scepter duration increased from 5/6/7 to 6/7/8\n"
" [[patchnote]] Level 15 Talent increased from +48 Mist Coil Heal/Damage to +50\n"
" [[patchnote]] Level 15 Talent changed from +6 Armor to +65 Damage\n"
" [[patchnote]] Level 20 Talent changed from +80 Damage to +8 Armor\n"
" [[patchnote]] Level 25 Talent increased from 375 AoE Mist Coil to 425\n"
" [[shard:abaddon_aphotic_shield:shardupgrade]]\n"
" [[shardnote]] Causes Mist Coil and Aphotic Shield to apply a Curse of Avernus stack on enemies. Increases base slow by 6%.\n"
" [[shardvideo]]\n"
" [[heroend]]\n\n"
" [[hero:alchemist]]\n"
" [[patchnote]] Unstable Concoction manacost reduced from 120 to 90/100/110/120\n"
" [[patchnote]] Unstable Concoction cooldown reduced from 22/20/18/16 to 16\n"
" [[patchnote]] Acid Spray damage increased from 15/20/25/30 to 20/25/30/35\n"
" [[patchnote]] Acid Spray first damage instance is now immediate rather than after a second\n"
" [[patchnote]] Gold bonus cap reduced from 18/22/26/30 to 18/21/24/27 (last hit count from 5/7/8/9 to 5/6/7/8)\n"
" [[patchnote]] If an ally already has a scepter buff or the item, it refunds them based on which version they have (either 4200 or 5800). \n"
" [[patchnote]] Alchemist granted scepter buffs provide the full stat bonuses.\n"
" [[patchnote]] Scepter damage/spell amp bonus reduced from 30/6 to 20/5\n"
" [[patchnote]] Level 20 Talent reduced from +30% Cleave to +25%\n"
" [[shard:alchemist_berserk_potion:shardnew]]\n"
" [[shardnote]] Grants Berserk Potion. Throws a potion at the target ally, applying a basic dispel and granting +50 Attack Speed and +40 HP Regen for 10 seconds. Cast Range: 800. Cooldown: 45. Manacost: 125. Can be used on self.\n"
" [[shardvideo]]\n"
" [[heroend]]\n\n"
" [[hero:ancient_apparition]]\n"
" [[patchnote]] Ice Blast max travel time improved from 2 seconds to 1.75\n"
" [[patchnote]] Chilling Touch manacost reduced from 30/50/70/90 to 30/45/60/75\n"
" [[shard:ancient_apparition_ice_vortex:shardupgrade]]\n"
" [[shardnote]] Causes Ice Vortex to deal 40 DPS and reduces attack speed by 20.\n"
" [[shardvideo]]\n"
" [[heroend]]\n\n"
" [[hero:antimage:scepterreworked]]\n"
" [[patchnote]] Mana Break max burn reduced from 1/2/3/4% to 1/1.8/2.6/3.4%\n"
" [[patchnote]] Level 15 Talent changed from +12 Agility to +8 Armor\n"
" [[patchnote]] Level 15 Talent reduced from +325 Blink Cast Range to +300\n"
" [[patchnote]] Level 20 Talent changed from Blink Uncontrollable Illusion to +0.1 Mana Void Damage Multiplier\n"
" [[patchnote]] <span class=\"reworked-scepter\">Scepter Rework:</span> Now grants Blink Fragment. Blinks an illusion at the target enemy or location and attacks them for 7 seconds. Uses Blink's Cast Range. Illusion cannot be controlled, deals 50% damage, takes 250%. Casting Counterspell also casts it on the Fragment illusion. Cooldown: 20. Manacost: 50\n"
" [[shard:antimage_counterspell:shardupgrade]]\n"
" [[shardnote]] Successful Counterspell creates an illusion attacking the caster for 5 seconds. Removes Counterspell manacost.\n"
" [[shardvideo]]\n"
" [[heroend]]")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html