如何基于模式(Python)中以前的正则表达式在正则表达式中执行if-else?
我正在尝试匹配表单的URL如何基于模式(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:\/\/([
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我已经更新了我的答案来解释这种可能性。当需要使用部分匹配模式时,您实际上只关心捕获组。