gpt4 book ai didi

Python:在特定条件下使用正则表达式查找和替换

转载 作者:行者123 更新时间:2023-11-28 22:40:05 25 4
gpt4 key购买 nike

基本上我想编写一个脚本来清理 URL,将用“(点)”字符串替换点。例如,如果我有 http://www.google.com运行脚本后,我希望它是 http://www(dot)google(dot) .好吧,当我的文本文件仅包含 url 或其他字符串时,使用 .replace 很容易实现这一点,但就我而言,我的文本文件中也有 IP 地址,我不希望 IP 地址中的点更改为“(点)”。

我尝试使用正则表达式执行此操作,但我的输出是"http://ww(dot)oogl(dot)om192.60.10.1033.44.55.66“

这是我的代码

from __future__ import print_function


import sys
import re

nargs = len(sys.argv)
if nargs < 2:

sys.exit('You did not specify a file')
else:
inputFile = sys.argv[1]
fp = open(inputFile)
content = fp.read()

replace = '(dot)'
regex = '[a-z](\.)[a-z]'
print(re.sub(regex, replace, content, re.M| re.I| re.DOTALL))

我想我需要有一个条件来检查模式是否为 number.number - 不要替换。

最佳答案

您可以使用先行和后行断言:

import  re

s = "http://www.google.com 127.0.0.1"

print(re.sub("(?<=[a-z])\.(?=[a-z])", "(dot)", s))
http://www(dot)google(dot)com 127.0.0.1

要处理字母和数字,这应该可以解决问题,确保至少有一个字母:

s = "http://www.googl1.2com 127.0.0.1"

print(re.sub("(?=.*[a-z])(?<=\w)\.(?=\w)", "(dot)", s, re.I))

http://www(dot)googl1(dot)2com 127.0.0.1

对于你的文件,你需要re.M:

In [1]: cat test.txt
google8.com
google9.com
192.60.10.10
33.44.55.66
google10.com
192.168.1.1
google11.com

In [2]: with open("test.txt") as f:
...: import re
...: print(re.sub("(?=.*[a-z])(?<=\w)\.(?=\w)", "(dot)", f.read(), re.I|re.M))
...:
google8(dot)com
google9(dot)com
192.60.10.10
33.44.55.66
google10(dot)com
192.168.1.1
google11(dot)com

如果文件很大并且内存有问题,您也可以逐行执行,或者将所有行存储在列表中,或者边走边使用每一行:

import re
with open("test.txt") as f:
r = re.compile("(?=.*[a-z])(?<=\w)\.(?=\w)", re.I)
lines = [r.sub("(?=.*[a-z])(?<=\w)\.(?=\w)", "(dot)") for line in f]

关于Python:在特定条件下使用正则表达式查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com