我想使用正則運算式從檔案中提取文本字串并將它們添加到串列中以使用提取的文本創建一個新檔案,但是我無法將要捕獲的文本與包含的周圍正則運算式內容分開
Example text:
#女
&10"「信號が亂れているみたい。聞こえる? アナタ?」"100("",3,2,0,0)
100("se003",0,2,0,0)
#男
&11"「──ポン太、もっと近づ────すぐ直す」"100("",4,2,0,0)
#女
&12"「……了解」"&13"またガニメデステーションに送られた通信信號と混線してしまったのだろう。別段慌てるような事ではなかった。"&14"作業船の方を確認した後、女はやるべき事を進めようとカプセルに視線を戻す。"52("_BGMName","bgm06")
42("BGM","00Sound.dat")
52("_GRPName","y12r1")42("DrawBG","00Draw.dat")#女
&15"「!?」"&16"睡眠保存カプセルは確かに止まっていたのに、その『中身』は止まっていなかった。"&17"スーツの外は真空狀態で何も聞こえない。だが、その『中身』が元気よく泣いている事は見ればわかる。"100("",3,2,0,0)
100("se003",0,2,0,0)
#男
&18"「お──信號がまた──どうした!」"#女
&19"「信じられない。赤ちゃんよ。しかもこの子は……生きている。生きようとしてる!!」"100("",4,2,0,0)
我想提取 &00"text to capture" 之間的內容,只保留引號之間的內容。我已經嘗試過使用非捕獲組、前瞻/后向撰寫正則運算式的各種方法,但 python 將始終捕獲所有內容。如果每行只發生一次,我目前在下面的代碼中得到的將起作用,但有時每行有多個,所以我不能像下面的#2 那樣將第 1 組添加到串列中。
在下面的代碼中,#1 將附加在該行上找到的相應字串,包括我要洗掉的內容:
&10"「信號が亂れているみたい。聞こえる?アナタ?」"100("",3,2,0,0)
#2 將輸出我真正想要的:
「信號が亂れているみたい。聞こえる?アナタ?」
但它僅在每行出現一次時才有效,因此 &13、&14 和 &16、&17 消失。
我怎樣才能只添加我想要提取的部分,尤其是當它每行出現多次時?
# Code:
def extract(filename):
words = []
with open(filename, 'r', encoding="utf8") as f:
for line in f:
if (re.search(r'(?<=&\d")(. ?"*)(?=")|(?<=&\d\d")(. ?"*)(?=")|(?<=&\d\d\d")(. ?"*)(?=")|(?<=&\d\d\d\d")(. ?"*)(?=")|(?<=&\d\d\d\d")(. ?"*)(?=")', line)):
#1 words.append(line)
#2 words.append(re.split(r'(?<=&)\d "(. ?)(?=")', line)[1])
for line in words:
print(line "\n")
uj5u.com熱心網友回復:
您可以縮短模式和匹配&后跟 1 個以上的數字,并捕獲第 1 組中雙引號之間的內容。
一次讀取整個檔案并使用 re.findall 捕獲組值。
&\d "([^"]*)"
模式匹配:
&\d匹配&和 1 位數"匹配開頭雙引號([^"]*)捕獲組 1,匹配除"(包括換行符)以外的任何字符"匹配結束雙引號
請參閱
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432906.html
下一篇:如何使用正則運算式匹配特定字串?
