首页 > 解决方案 > 用正则表达式替换不需要的字符

问题描述

我有这个字符串,它在一行上:

https[:]//sometest[.]com,http[:]//differentt,est.net,https://lololo.com

请注意,我故意放入,第二个 URL。我正在尝试替换相遇的,地方。http(s)到目前为止,我试过这个:

pattern_src = r"http(.*)"
for i, line_src in enumerate(open("/Users/test/Documents/tools/dump/email.txt")):
    for match in re.finditer(pattern_src, line_src):
        mal_url = (match.group())
source_ = mal_url

string = source_
for ch in ["[" , "]"]:
    for c in [","]:
        string = string.replace(c,"\n")
        string = string.replace(ch,"")
        with open("/Users/test/Documents/tools/dump/urls.txt", 'w') as file:
                file.write(string)
print(string)

但是您可以清楚地看到它将替换,字符串中的所有内容。所以我的问题是,我将如何替换,之前的http并将每个httpURL 都放在一个新行上?

标签: pythonpython-3.xregex

解决方案


>>> s = 'https[:]//sometest[.]com,http[:]//differentt,est.net,https://lololo.com'
>>> print(re.sub(r',(?=http)', '\n', s))
https[:]//sometest[.]com
http[:]//differentt,est.net
https://lololo.com

,(?=http),仅当它后跟. 时才会匹配http。这(?=http)是一个积极的前瞻断言,它允许在不消耗这些字符的情况下检查条件。

请参阅参考资料 - 这个正则表达式是什么意思?有关环视或我的书的详细信息:https ://learnbyexample.github.io/py_regular_expressions/lookarounds.html


推荐阅读