[英]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.