簡體   English   中英

RegEx如何在兩個字符串之間查找文本

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

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