讀文件的意義在於知道別人已經實現了什麼,怎麼用用了三天的時間造了乙個方形輪子,記錄下來以吸取教訓。讀原始碼的意義在於知道輪子是怎麼造出來的
要好好學英語
需求是用正則匹配一段文章,有n個匹配項,指定刪除其中的某乙個(第1個/第2個/倒數第1個…)
python re庫的文件是英文的,在提不起興趣一句一句翻譯下,從這裡開始走上了一條岔路。
錯誤的實現思路:
if index < 0: # 反向匹配
front = str1
rear = ''
for i in range(abs(index)):
try:
_front_ = re \
.search(r'.*(?=' + reg + ')', front) \
.group()
_cur_ = re \
.search(r'' + reg + '$', re.search(r'.*(' + reg + ')', front).group()) \
.group()
_rear_ = re.compile(r'.*(' + reg + ')').sub('', front)
except attributeerror:
break
else:
if i != (-1 - index):
rear = _cur_ + _rear_ + rear
else:
rear = _rear_ + rear
front = _front_
else: # 正向匹配
front = ''
rear = str1
for i in range(index + 1):
try:
obj = re.search(r'' + reg, rear)
start = obj.start()
end = obj.end()
_front_ = rear[0:start]
_rear_ = rear[end:]
_cur_ = rear[start:end]
except attributeerror:
break
else:
if i != index:
front = front + _front_ + _cur_
else:
front = front + _front_
rear = _rear_
str1 = front + rear
print(str1)
正確的實現思路:
re.finditer()返回的物件中包含了匹配項的開始/結束位置,只要把前後內容拼起來,丟棄匹配的位置就可以了。
import re
str1 = 'a1b1c1d1e.a2b2c2d2e.a3b3c3d3e.a4b4c4d4e.a5b5c5d5e.'
rules = ': 2,
'b\d': -1,
'c\d': -3,
'd\d': -3,
}for (reg, index) in rules.items():
pos = [(m.start(0), m.end(0)) for
m in re.finditer(reg, str1)][index]
print(pos)
front = str1[:pos[0]]
rear = str1[pos[1]:]
str1 = front + rear
print(str1)
輪子跑起來後運**況很糟糕,65000條資料清洗4條正則匹配項花了10分鐘,更換完輪子方法後只用了2分鐘。 記一次Python爬蟲入門
程式思路 程式步驟 2 分析該網頁的 3 findall查詢出所有的url,儲存到list中 4 遍歷list,儲存到本地 程式原始碼 請求網頁 import time import requests import re import os 請求頭部 headers response request...
記一次除錯
這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...
記一次 EqualsAndHashCode的疑惑
lombok的使用真的是讓開發人員欲罷不能,乙個 data不管有多少屬性全部搞定,以後加字段也不用從新生成get和set方法。不過這裡還是有乙個小坑需要注意一下,舉個例子 public class equalsandhashcodetest data noargsconstructor access...