簡體   English   中英

正則表達式捕獲兩個正則表達式模式之間的 n 行文本

[英]Regular expression to capture n lines of text between two regex patterns

需要正則表達式的幫助才能在兩個正則表達式匹配之間准確抓取 n 行文本。 例如,我需要 17 行文本,我使用了下面的示例,它不起作用。

請看下面的示例代碼:

import re
match_string = re.search(r'^.*MDC_IDC_RAW_MARKER((.*?\r?\n){17})Stored_EGM_Trigger.*\n'), t, re.DOTALL).group()
value1 = re.search(r'value="(\d+)"', match_string).group(1)
value2 = re.search(r'value="(\d+\.\d+)"', match_string).group(1)
print(match_string)
print(value1)
print(value2)

我在這里添加了一個示例字符串,因為 SO 不允許長代碼字符串: https://hastebin.com/aqowusijuc.xml

你得到誤報是因為你使用了 re.DOTALL 標志,它允許. 匹配換行符的字符。 也就是說,當您匹配((.*?\r?\n){17})時, . 可能會吃掉許多額外的換行符以滿足您所需的 17 個計數。您現在還意識到\r是多余的。 另外,用^.*?開始你的正則表達式是多余的,因為您強制搜索從頭開始,然后說搜索引擎應該跳過盡可能多的字符以找到MDC_IDC_RAW_MARKER 因此,一個簡化且正確的正則表達式將是:

match_string = re.search(r'MDC_IDC_RAW_MARKER.*\n((.*\n){17})Stored_EGM_Trigger.*\n', t)

正則表達式演示

暫無
暫無

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

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