Sagiri 发表于 2021-9-10 13:34:01

如何对匹配字符串前后添加引号

例如有一个字符串(很长): $abc$哈哈哈$abcd$哈哈哈...$aaa$...

我想让 $...$ 变成 '$...$'

就像 '$abc$'哈哈哈'$abcd$'哈哈哈...'$aaa$'...

救命,我想了好久也没想到高效的解决办法

傻眼貓咪 发表于 2021-9-10 13:41:30

本帖最后由 傻眼貓咪 于 2021-9-10 13:48 编辑

def func(s: str) -> str:
    res = ""
    left = True
    for i in s:
      if i != "$":
            res = res+i
      elif left == True:
            res = res+"\'"+i
            left = not(left)
      else:
            res = res+i+"\'"
            left = not(left)
    return res


string = "$banana$abcd$apple$1234$car$5678adsasda"
print(func(string))

Sagiri 发表于 2021-9-10 13:54:20

傻眼貓咪 发表于 2021-9-10 13:41


爬虫,大概有2k多个文本,每个文本大约有10个左右的$$,这样效率会不会太慢了?

suchocolate 发表于 2021-9-10 14:09:05

Sagiri 发表于 2021-9-10 13:54
爬虫,大概有2k多个文本,每个文本大约有10个左右的$$,这样效率会不会太慢了?

那爬虫的代码呢?

Sagiri 发表于 2021-9-10 14:17:54

suchocolate 发表于 2021-9-10 14:09
那爬虫的代码呢?

import re
import urllib.request,urllib.error
import bs4

baseUrl = "https://www.luogu.com.cn/problem/P"
savePath = "C:\\Users\\Sagiri\\Desktop\\p\\"
maxn = 1005

def main():
    print("计划爬取到P{}".format(maxn))
    for i in range(1000,maxn+1):
      try:
            print("正在爬取P{}".format(i))
            html = getHTML(baseUrl + str(i))
            problemMD = getMD(html)
            saveData(problemMD,"P"+str(i)+".md")
      except Exception:
            pass
      continue
    print("爬取完毕")

def getHTML(url):
    headers = {
      "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 85.0.4183.121 Safari / 537.36"
    }
    request = urllib.request.Request(url = url,headers = headers)
    response = urllib.request.urlopen(request)
    html = response.read().decode('utf-8')
    return html

def getMD(html):
    bs = bs4.BeautifulSoup(html,"html.parser")
    core = bs.select("article")
    md = str(core)
    md = re.sub("<h1>","# ",md)
    md = re.sub("<h2>","## ",md)
    md = re.sub("<h3>","#### ",md)
    md = re.sub("</?+[^<>]*>","",md)
    return md

def saveData(data,filename):
    cfilename = savePath + filename
    file = open(cfilename,"w",encoding="utf-8")
    for d in data:
      file.writelines(d)
    file.close()

if __name__ == '__main__':
    main()




爬洛谷的题库,因为洛谷用的md语法编辑的,变量全是$...$形式,必须要加`$...$`才能在编辑器里正常读取

傻眼貓咪 发表于 2021-9-10 14:26:01

Sagiri 发表于 2021-9-10 13:54
爬虫,大概有2k多个文本,每个文本大约有10个左右的$$,这样效率会不会太慢了?

時間複雜度:>= 2000*10(不會很大啊)
先試試吧,再不行再試其它方法吧,目前我只想到這樣
{:5_91:}

Sagiri 发表于 2021-9-10 14:30:15

傻眼貓咪 发表于 2021-9-10 14:26
時間複雜度:>= 2000*10(不會很大啊)

先谢谢大佬了,其实我一开始也是这么想的,但是太懒了不太想写,就想着有没有某个方法可以快速替换,结果找了一上午也没找到_(:з)∠)_

blahblahfc 发表于 2021-9-10 15:08:42

你说的是这种 $...$ 么?这是 markdown 支持的 LaTeX 行内公式,可能需要一个能渲染 LaTeX 公式的浏览器,找一找有很多。
如果很熟悉 LaTeX 语法不渲染也能读懂吧

## 题目描述
输入两个整数 $a, b$,输出它们的和($|a|,|b| \le {10}^9$)。

Sagiri 发表于 2021-9-10 17:04:23

blahblahfc 发表于 2021-9-10 15:08
你说的是这种 $...$ 么?这是 markdown 支持的 LaTeX 行内公式,可能需要一个能渲染 LaTeX 公式的浏览器, ...

确实,但是有时候公式比较复杂,不太方便阅读,而且latex语法我也不太会_(:з)∠)_

傻眼貓咪 发表于 2021-9-10 17:30:43

本帖最后由 傻眼貓咪 于 2021-9-10 17:39 编辑

Sagiri 发表于 2021-9-10 17:04
确实,但是有时候公式比较复杂,不太方便阅读,而且latex语法我也不太会_(:з)∠)_

LaTex 語言並不難,因為可用代碼不多,只需變化就可以了,我常在力扣發表討論時也常用,多少看你想知道什麼可以告訴你
页: [1]
查看完整版本: 如何对匹配字符串前后添加引号