python將句子中兩個子串位置互換的

2021-07-22 05:09:52 字數 1298 閱讀 2156

想要將文中所有的類似 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,和...