import re
regex = re.compile(r"([a-z]+\.){2,}[a-z]+")
test_str = ("# 🧩 ReVanced Patches\n\n"
"Official patches by ReVanced\n\n"
"## 📜 List of available patches\n\n"
"### 📦 `com.twitter.android`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `timeline-ads` | Removes ads from the Twitter timeline. | all |\n"
"</details>\n\n"
"### 📦 `com.reddit.frontpage`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |\n"
"</details>\n\n"
"### 📦 `com.garzotto.pflotsh.ecmwf_a`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |\n"
"</details>\n\n"
"### 📦 `com.google.android.apps.youtube.music`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.17.51 |\n"
"| `tasteBuilder-remover` | Removes the \"Tell us which artists you like\" card from the home screen. | 5.16.51 |\n"
"| `hide-get-premium` | Removes all \"Get Premium\" evidences from the avatar menu. | 5.17.51 |\n"
"| `compact-header` | Hides the music category bar at the top of the homepage. | 5.16.51 |\n"
"| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.17.51 |\n"
"| `background-play` | Enables playing music in the background. | 5.17.51 |\n"
"| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.17.51 |\n"
"| `music-video-ads` | Removes ads in the music player. | 5.17.51 |\n"
"| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.17.51 |\n"
"| `exclusive-audio-playback` | Enables the option to play music without video. | 5.17.51 |\n"
"</details>\n\n"
"### 📦 `de.dwd.warnapp`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |\n"
"</details>\n\n"
"### 📦 `com.ss.android.ugc.trill`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `tiktok-ads` | Removes ads from TikTok. | all |\n"
"</details>\n\n"
"### 📦 `com.google.android.youtube`\n"
"<details>\n\n"
"| 💊 Patch | 📜 Description | 🏹 Target Version |\n"
"|:--------:|:--------------:|:-----------------:|\n"
"| `swipe-controls` | Adds volume and brightness swipe controls. | 17.29.34 |\n"
"| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.29.34 |\n"
"| `minimized-playback` | Enables minimized and background playback. | 17.29.34 |\n"
"| `amoled` | Enables pure black theme. | 17.29.34 |\n"
"| `disable-create-button` | Hides the create button in the navigation bar. | 17.29.34 |\n"
"| `hide-cast-button` | Hides the cast button in the video player. | all |\n"
"| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.29.34 |\n"
"| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.29.34 |\n"
"| `premium-heading` | Shows premium branding on the home screen. | all |\n"
"| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |\n"
"| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.29.34 |\n"
"| `old-quality-layout` | Enables the original quality flyout menu. | 17.29.34 |\n"
"| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.29.34 |\n"
"| `hide-watermark` | Hides creator's watermarks on videos. | 17.29.34 |\n"
"| `sponsorblock` | Integrate SponsorBlock. | 17.29.34 |\n"
"| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.29.34 |\n"
"| `tablet-mini-player` | Enables the tablet mini player layout. | 17.29.34 |\n"
"| `custom-video-buffer` | Lets you change the buffers of videos. | 17.29.34 |\n"
"| `always-autorepeat` | Always repeats the playing video again. | 17.29.34 |\n"
"| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG | 17.29.34 |\n"
"| `settings` | Adds settings for ReVanced to YouTube. | all |\n"
"| `enable-debugging` | Enables app debugging by patching the manifest file. | all |\n"
"| `custom-playback-speed` | Adds more video playback speed options. | 17.29.34 |\n"
"| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.29.34 |\n"
"| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.29.34 |\n"
"| `video-ads` | Removes ads in the video player. | 17.29.34 |\n"
"| `general-ads` | Removes general ads. | 17.29.34 |\n"
"| `hide-infocard-suggestions` | Hides infocards in videos. | 17.29.34 |\n"
"</details>\n\n\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
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