[英]RegEx How to find text between two strings
我有這句話
XXX
text
XXX
XXX
text
XXX
XXX
text
XXX
我想捕獲XXX和XXX之間的文本。 (我正在嘗試從書中摘錄章節)
/XXX.*XXX/
這將捕獲第一個開始和最后一個結束
/XXX.*?XXX/
這將跳過第二章
謝謝你巴拉克
如果文本包含換行符( \\n
),則需要在正則表達式中添加“點匹配換行符”開關,並將匹配項設置為“非貪婪”:
/(?s)XXX.*?XXX/
編輯:感謝Alan的評論-我的開關有誤:( (?s)
是正確的
使用sed
解決方案
$ sed -n '/XXX/,/XXX/{n;p}' text
text
text
text
如果此XXX
字符串始終位於單獨的行中,那么我建議您簡單地遍歷行並“手動”選擇它。 它應該比多行正則表達式更快。
蟒蛇:
delim = "XXX"
inside = False
lines = []
idx = 0
for line in file:
if line.strip() == delim:
inside = not inside
if inside: lines.append([])
else: idx += 1
elif inside:
lines[idx].append(line)
您的描述與示例不符。 如果XXX
代表一個章節標題,則每個章節的開頭只能有一個。 要檢測一章的結尾,您需要對下一章的標題進行前瞻:
/XXX.*?(?=XXX)/s
除最后一章外,其余所有內容均應適用; 為了匹配您可以使用\\z
,最后一個錨點:
/XXX.*?(?=XXX|\z)/s
如果我們知道您使用的是哪種正則表達式,那真的會有所幫助。 例如,在Ruby中,您必須使用/m
而不是/s
來允許.
匹配換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.