2012-02-10 43 views
13

我有大約150個文字文件充滿字符信息。每個文件包含兩個獨特的單詞()阿爾法和布拉沃,我想提取這些獨特的單詞之間的文本,並將其寫入不同的文件。如何提取大文本文件中兩個唯一字詞之間的信息

手動我可以CTRL + F的兩個單詞之間複製文本,我只是想知道如何使用一個程序(最好是Python)爲許多文件做到這一點。

回答

27

您可以使用regular expressions

>>> st = "alpha here is my text bravo" 
>>> import re 
>>> re.findall(r'alpha(.*?)bravo',st) 
[' here is my text '] 

alpha here is my line 
yipee 
bravo 

現在使用open讀取文件,比應用regular expressions

我test.txt文件。

>>> f = open('test.txt','r') 
>>> data = f.read() 
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL) 
>>> x 
[' here is my line\nyipee\n'] 
>>> "".join(x).replace('\n',' ') 
' here is my line yipee ' 
>>> 
+1

+1:這是正則表達式擅長的地方。 – jathanism 2012-02-10 03:31:40

+0

-1(1)x未定義(2)輸入輸出模塊?? – 2012-02-10 04:56:26

+0

@JohnMachin:修正了'x'的東西。 – RanRag 2012-02-10 04:58:58

2

而不是使用正則表達式使用Python string.find方法。

>>>> unique_word_a = 'alpha' 
>>>> unique_word_b = 'bravo' 
>>>> s = 'blah blah alpha i am a good boy bravo blah blah' 
>>>> your_string = s[s.find(unique_word_a)+len(unique_word_a):s.find(unique_word_b)].strip() 
i am a good boy 
+1

如果我有多個獨特的單詞a和獨特的單詞b,我會發生什麼變化。如何創建一個索引來搜索獨特的單詞a和獨特的單詞b之間的第5次出現? – Amistad 2014-07-01 11:19:26

9
a = 'alpha' 
b = 'bravo' 
text = 'from alpha all the way to bravo and beyond.' 

text.split(a)[-1].split(b)[0] 
# ' all the way to ' 
+3

你可以通過添加1的計數來幫助分割,所以它會停止尋找額外的實例來分割:'text.split(a,1)' – PaulMcG 2012-02-10 08:49:11

6

str.find和它的兄弟rfindstartend ARGS。

alpha = 'qawsed' 
bravo = 'azsxdc' 
startpos = text.find(alpha) + len(alpha) 
endpos = text.find(bravo, startpos) 
do_something_with(text[startpos:endpos] 

如果包含的文本短而靠前,這是最快的方法。

如果包含的文本是比較大的,使用方法:

startpos = text.find(alpha) + len(alpha) 
endpos = text.rfind(bravo) 

如果包含的文本短,接近尾聲,用途:

endpos = text.rfind(bravo) 
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha) 

第一種方法是在任何情況下優於從文本開始開始第二次搜索的幼稚方法;如果您的包含文本沒有主導模式,請使用它。

相關問題