使用Regex删除URL的某些部分

时间:2016-03-27 12:12:25

标签: python regex string replace

我在Python中编写了一个Git接口,它允许我将内容提交给我的GitHub和Bitbucket存储库。在我的本地存储库的配置文件中,我将远程URL更改为

https://(Username):(Password)@bitbucket.org/...

这样我就不必一直输入密码了。这很好用,但不幸的是,当我推送回购时,Git在窗体的控制台上输出一条消息

To https://(Username):(Password)@bitbucket.org/...../repo.git
   3f6ac75..16c47c9  master -> master

每个看屏幕的人都可以查看我的密码。我现在想用正则表达式用星号替换密码,这样我得到:

To https://(Username):*****@bitbucket.org/...../repo.git
   3f6ac75..16c47c9  master -> master

我已经用re.sub(r'//.*:.*@.*\..*/', '//(URL hidden)', msg)尝试过了,但这很难看。如何使用正则表达式用星号替换密码?

3 个答案:

答案 0 :(得分:0)

https:\/\/[^:]*:([^@]*)@.*?$

请查看DEMO

答案 1 :(得分:0)

您可以尝试以下正则表达式:

import re

url = u"https://(Username):(Password)@bitbucket.org/...../repo.git"

pattern = re.compile(ur'(http.*:)\(.*?\)(\S*)', re.MULTILINE)
result = re.sub(pattern, "\\1********\\2", url)

它将转为

https://(Username):(Password)@bitbucket.org/...../repo.git

进入

https://(Username):********@bitbucket.org/...../repo.git

请参阅演示at regex101

答案 2 :(得分:0)

最后的答案给了我正确的想法。我现在使用以下Python代码,它非常有效且可靠:

PASS_REGEX = r"(\b(?:[a-z]{,5})://.*:)(.*)(@[^ \b]+)"
PASS_REPLACEMENT = r"\1----------\3"
ret = re.sub(PASS_REGEX, PASS_REPLACEMENT, ret, flags=re.MULTILINE)

简短解释:从单词边界开始(例如行或空格等)然后最多5个字符(git,http,https),然后是冒号和两个斜杠,一些任意字符串,再一次冒号。这是第一组。然后,随后是一个任意字符串(这是第2组),后跟一个@和一些非空格字符,后跟一个字边界(这是第3组)。然后将该模式替换为组1的内容,接着是----------,然后是组3的内容。运行良好并修复URL,无论它出现在何处。

告诉我需要什么:我为Sublime Text编写了一个Git插件。我通常会在.git / config文件中保存存储库的用户名和密码,因为我有不同的帐户,当我使用时会导致问题 git config --global。问题是,当我推送回购时(无论是从Sublime还是直接从终端完成),密码都是由git显示的("推送到https://...username:password@ ....&# 34;)任何在屏幕上看的人都可以看到它。