用Python替换ONLY域

时间:2017-10-06 22:33:00

标签: python regex urlparse

我一直在使用正则表达式搜索文档中的所有URL并替换它们,但现在我只想替换主机名,而不是子域或URL的任何其他部分。

例如我想要https://ftp.website.com> https://ftp.mything.com

这是我正在编写的用于清理文档的工具,对于其中的一些内容我是相当新的。任何帮助将不胜感激。谢谢!

到目前为止,这是我快速而肮脏的发现和替换:

import fileinput
import re

for line in fileinput.input():
    line = re.sub(
        r'^(?:http:\/\/|www\.|https:\/\/)([^\/]+)',
        r'client.com', line.rstrip())
    line = re.sub(
        r'\b(\d{1,3}\.){2}\d{1,3}\b',
        r'1.33.7', line.rstrip())
    print(line)

我意识到URL解析可以实现这一点,但我希望这能找到文档中的URL,我不想提供它们。也许我只是需要帮助使用正则表达式找到网址并将其传递给urlparse以删除我想要的部分。希望这澄清。

2 个答案:

答案 0 :(得分:0)

我的解决方案将URL分为3组:在host,hostname和afterhost:

之前
import re
regex = r"^(http[:\/\w\.]*[/.])(\w+)(\.[\w\/]+)$"

target = "http://olddomain.com"
print re.sub(regex,r"\1newdomain\3",target)
# 'http://newdomain.com'

target = "http://ftp.olddomain.com"
print re.sub(regex,r"\1newdomain\3",target)
# 'http://ftp.newdomain.com'

target = "https://sub.sub.olddomain.com/sub/sub"
print re.sub(regex,r"\1newdomain\3",target)
# 'https://sub.sub.newdomain.com/sub/sub'

target = "how.about.this"
print re.sub(regex,r"\1newdomain\3",target)
# 'how.about.this'

答案 1 :(得分:0)

$value = str_contains('This is my name', 'my');
// true

表示删除注释并注释掉文件输入。我把它留在了这里,所以它会按要求工作。

import fileinput
import re

regex = r"(^.*http\://(?:www\.)*)\S+?((?:\.\S+?)*/.*$)"

for line in fileinput.input():
    print re.sub(regex,r"\1newdomain\2",line)

# targets = [ "http://olddomain.com/test/test" , "this urel http://www.olddomain.com/test/test dends" ]
#
# for target in targets:
#     print re.sub(regex,r"\1newdomain\2",target)