如何从Python中的特定索引开始执行regex替换

2024-05-19 08:59:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件,一个文件我通过解析寻找正则表达式来替换第二个文件中的字符串。第一个文件是一个.csv文件,它在第三个索引处包含字符串。索引0-2刚刚添加到数据上。在

文件1中的字符串如下所示:

"foo http://abc bar http://123."
...
...

在文件2中,只有一个URL列表,用来替换在file1中找到的URL。在

文件2如下所示:

^{2}$

我开始遍历文件1,查找URL,当我找到一个URL时,我用文件2中的URL替换它,然后转到下一个URL。这些都是按顺序完成的,因此在替换文件1中的URL时,不会重复来自文件2的URL。在

解析完成后生成的字符串应如下所示:

"foo http://def bar http://456"

我的问题是,当使用re.sub公司要执行替换,我只能用文件2中的同一个URL替换第一个URL或同时替换这两个URL。例如,我的字符串最终如下所示:

"foo http://def bar http://def"

有什么方法我可以用吗re.sub公司要替换第一个URL,然后跟踪它在字符串中的位置,这样当它碰到第二个URL时,它会用文件2中对应的URL替换它?在

我写的代码如下:

shortened = open('shortenedURLs.txt','r')
linesReadfromFile = shortened.readlines()
newRetweet = open('new_Retweet.csv','w')
with open('tweets_nurl.csv','rb') as inputfile1:
    read=csv.reader(inputfile1, delimiter=',')
    a = 0
    for row in read:
        url = re.findall('https*://', row[3])
    if url:
            for i in xrange(len(url)):
            currentLine=row[3].rstrip('\n')
            if re.search('http://', row[3]):
                iter = re.finditer(r'http://',row[3])
                indices = [m.start(0) for m in iter]
                print indices
                currentLine=re.sub(r'http://[^\s]*', linesReadfromFile[a].rstrip('\n'),  currentLine, count=1)
                a=a+1
            if re.search('https://',row[3]):
                currentLine = re.sub(r'https://[^\s]*', linesReadfromFile[a].rstrip('\n'), currentLine) 
                a=a+1
        newRetweet.write(row[0]+","+row[1]+","+row[2]+","+currentLine+'\n')


    else:
        newRetweet.write(','.join(row)+'\n')

shortened.close()
newRetweet.close()

“print index”告诉我在哪里找到匹配项,但是我不确定如何利用它们来指定应该在哪里进行替换。在

谢谢你的帮助!在


Tags: 文件csv字符串rehttpurlfoodef
1条回答
网友
1楼 · 发布于 2024-05-19 08:59:59
site_urls = list(open("urls.txt"))
def replacer(match):
    return site_urls.pop(0).strip()

re.sub("http[^ ]*",replacer,my_file_text)

我想我会做你想做的。。。在

因为函数是一行,你可以很容易地用lambda替换它。。。我只是用一个普通的方法来说明问题

相关问题 更多 >

    热门问题