如何基于模式(Python)中以前的正则表达式在正则表达式中执行if-else?

如何基于模式(Python)中以前的正则表达式在正则表达式中执行if-else?,python,regex,Python,Regex,我正在尝试匹配表单的URL r'https://.\.mysite.com' 然而,人们会注意到,如果没有子域,mysite.com将无效。如果存在子域,如sub.mysite.com,则我只希望在mysite前面有一个点,否则,我希望在https://和mysite.com 如何实现这一点?这似乎不是Python特有的问题,而是一个正则表达式问题 您可以修改表达式以选择性地接受子域: https:\/\/([^.]+\.)?mysite\.com 或允许多层次子域: https:\/\/([

我正在尝试匹配表单的URL

r'https://.\.mysite.com'

然而,人们会注意到,如果没有子域
,mysite.com
将无效。如果存在子域,如
sub.mysite.com
,则我只希望在mysite前面有一个点,否则,我希望在
https://
mysite.com


如何实现这一点?

这似乎不是Python特有的问题,而是一个正则表达式问题

您可以修改表达式以选择性地接受子域:

https:\/\/([^.]+\.)?mysite\.com
或允许多层次子域:

https:\/\/([^.]+\.)*mysite\.com
此外,如果您不想使用捕获组,可以使用非捕获组:

https:\/\/(?:[^.]+\.)*mysite\.com

这似乎不是一个特定于Python的问题,但更像是一个正则表达式问题

您可以修改表达式以选择性地接受子域:

https:\/\/([^.]+\.)?mysite\.com
或允许多层次子域:

https:\/\/([^.]+\.)*mysite\.com
此外,如果您不想使用捕获组,可以使用非捕获组:

https:\/\/(?:[^.]+\.)*mysite\.com

这:
r'https://.\.?mysite.com'
?它不会识别?mysite.com'这:
r'https://.\.?mysite.com'
?它不会识别?mysite.com'https://(?:.+\)?mysite.com,同样不要这样做。*@user8426627捕捉得好,edited@andrewgu为什么我想要捕获与非捕获?同样的问题是
https:…mysite.com
passes@AlanH我已经更新了我的答案来解释这种可能性。当您需要使用部分匹配模式时,您实际上只关心捕获组。https://(?:.+\)?mysite.com,同样不要这样做。*@user8426627捕捉得好,edited@andrewgu为什么我想要捕获与非捕获?同样的问题是
https:…mysite.com
passes@AlanH我已经更新了我的答案来解释这种可能性。当需要使用部分匹配模式时,您实际上只关心捕获组。