如何在大型文本文件中的两个唯一单词之间提取信息

时间:2012-02-10 02:55:07

标签: python parsing search text batch-file

我有大约150个填充了字符信息的文本文件。每个文件包含两个唯一的单词()alpha和bravo,我想在这些独特的单词之间提取文本并将其写入不同的文件。

手动我可以CTRL + F替换两个单词并在其间复制文本,我只是想知道如何使用程序(最好是Python)为许多文件执行此操作。

4 个答案:

答案 0 :(得分:33)

您可以使用regular expressions

>>> 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 '
>>>

答案 1 :(得分:11)

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 '

答案 2 :(得分:7)

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)

第一种方法在任何情况下都比从文本开头开始第二次搜索的朴素方法更好;如果您所包含的文本没有显性模式,请使用它。

答案 3 :(得分: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