![](/img/trans.png)
[英]How to extract text between certain patterns using regular expression (RegEx)?
[英]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.