文字情報が入った約150のテキストファイルがあります。各ファイルには2つの一意の単語()alphaとbravoが含まれています。これらの一意の単語の間のテキストを抽出して、別のファイルに書き込みます。
手動で2つの単語をCTRL + Fしてテキストをコピーできます。多くのファイルに対してプログラム(できればPython)を使用してこれを行う方法を知りたいだけです。
正規表現 を使用できます。
>>> st = "alpha here is my text bravo"
>>> import re
>>> re.findall(r'alpha(.*?)bravo',st)
[' here is my text ']
私のtest.txtファイル
alpha here is my line
yipee
bravo
現在 open を使用してファイルを読み取り、regular expressions
を適用しています。
>>> 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 '
>>>
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 '
str.find
とその兄弟rfind
にはstart
とend
引数があります。
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)
最初の方法は、テキストの最初から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