簡體   English   中英

在python中的兩個字符串之間查找數據

[英]Finding data in-between two strings in python

我有一個文本文件,其中包含一些格式,例如:

PAGE(leave) 'Data1'
line 1
line 2 
line 2
...
...
...
PAGE(enter) 'Data1'

我需要獲取兩個關鍵字之間的所有行並將其保存為文本文件。 到目前為止,我已經遇到以下問題。 但是我有一個single quotes問題, 正則表達式認為它是表達式中的引號,而不是關鍵字。

到目前為止,我的代碼:

log_file = open('messages','r')
    data = log_file.read()
    block = re.compile(ur'PAGE\(leave\) \'Data1\'[\S ]+\s((?:(?![^\n]+PAGE\(enter\) \'Data1\').)*)', re.IGNORECASE | re.DOTALL)
    data_in_home_block=re.findall(block, data)
    file = 0
    make_directory("home_to_home_data",1)
    for line in data_in_home_block:
        file = file + 1
        with open("home_to_home_" + str(file) , "a") as data_in_home_to_home:
            data_in_home_to_home.write(str(line))

如果有人可以指導我如何實現它,那就太好了。

如@JoanCharmant所指出的,此記錄沒有必要使用正則表達式,因為記錄由固定字符串分隔。

像這樣的東西就足夠了:

messages = open('messages').read()

blocks = [block.rpartition(r"PAGE\(enter\) 'Data1'")[0]
          for block in messages.split(r"PAGE\(leave\) 'Data1'")
          if block and not block.isspace()]

for count, block in enumerate(blocks, 1):
    with open('home_to_home_%d' % count, 'a') as stream:
        stream.write(block)

如果您擔心的是單引號,則可以用雙引號開頭正則表達式字符串...

'hello "howdy"'  # Correct
"hello 'howdy'"  # Correct

現在,這里還有更多問題...即使聲明為r ,您仍然必須在.compile轉義正則表達式的反斜杠(請參閱.compile 中的“ r” re.compile(r'模式標志')是什么意思? )只是沒有r ,您可能需要更多的反斜杠。

我創建了帶有兩個“部分”的測試文件:

PAGE\(leave\) 'Data1'
line 1
line 2 
line 3
PAGE\(enter\) 'Data1'

PAGE\(leave\) 'Data1'
line 4
line 5 
line 6
PAGE\(enter\) 'Data1'

下面的代碼將滿足您的要求(我認為)

import re

log_file = open('test.txt', 'r')
data = log_file.read()
log_file.close()
block = re.compile(
    ur"(PAGE\\\(leave\\\) 'Data1'\n)"
    "(.*?)"
    "(PAGE\\\(enter\\\) 'Data1')",
    re.IGNORECASE | re.DOTALL | re.MULTILINE
)
data_in_home_block = [result[1] for result in re.findall(block, data)]
for data_block in data_in_home_block:
    print "Found data_block: %s" % (data_block,)

輸出:

Found data_block: line 1
line 2 
line 3

Found data_block: line 4
line 5 
line 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM