想要將文中所有的類似 aa
。\citebb
。\citecc
替換為aa\cite
。bb\cite
。cc
即 。與
\cite 互換位置
採用非貪婪匹配,邊界條件都用*?來匹配即可。
import sys
import os
import re
def changefile(filename):
p = re.compile(r"(.*?)(。)(\\cite)(.*?)")
with open(filename,'r') as filein:
with open("new"+filename,'w') as fileout:
for line in filein.readlines():
line = p.sub(r'\1\3\2\4', line)
fileout.write(line)
filein.close()
fileout.close()
if __name__ == '__main__':
changefile("c1-chap3.tex")
非貪婪匹配:
先看乙個例子
舉例:
源字串:aa
test1
bb test2
cc 正規表示式一:
.*
匹配結果一:
test1
bb test2
正規表示式二:
.*?
匹配結果二:
test1
(這裡指的是一次匹配結果,所以沒包括
test2
)
另外有一點需要注意的是。我們都知道 r'...' 對字串不進行轉義。但是要注意的是,在正規表示式中該轉義的還是需要轉義。這是正規表示式的需要,而不能僅僅看作是乙個字串。
例如對於下面一句話,
aaaaaaaaa$
bbbbbbbbbbbbbbbbb
我們想要吧$符號後面的空格全刪除,需要這樣做。
p = re.compile(r'\$\s*')
#雖然有r''。但這裡是正規表示式,所以需要加\$
否則在正規表示式裡的意思就是結尾符號了
line = re.sub(p , r"$",line)
#這裡就是要替換為
r"$",這是乙個字串,不需要轉義
結果就是
aaaaaaaaa$bbbbbbbbbbbbbbbbb
京東演算法筆試(兩個子串)
題目描述 給定乙個字串s,請計算輸出含有連續兩個s作為子串的最短字串。注意兩個s可能有重疊部分。例如,ababa 含有兩個 aba 輸入描述 輸入包括乙個字串s,字串長度length 1 length 50 s中每個字元都是小寫字母.輸出描述 輸出乙個字串,即含有連續兩個s作為子串的最短字串。輸入a...
在Android中兩個子執行緒之間通訊
android中,相信主線程和子執行緒之間的通訊大家都不陌生了吧。在一次面試經歷中被問到了兩個子執行緒之間是如何進行通訊的。哎呦!這可蒙住我了。後來回家研究了下,分享給大家。其實android中線程通訊無非就是handler和looper的操作。一般情況下的主線程和子執行緒之間的通訊,都是通過主線程...
求列表中兩個子串行之差最小的序列
def mean sorted list 題目 將乙個序列分成兩個子串行,確保兩者之間的差值最小 實現 1.對列表排序 2.遞迴列表 取出 1位置元素作為big,2 位置元素作為small,從前到後,切到 2位置 不包括 3.遞迴結束條件 傳入的引數為空,開始遞迴退層 4.乙個大列表b list,和...