我正在尝试提取两行字符串之间的内容。这是文本的外观
Hhhshhajsjsjsj
Hshhejjsjsmk
Hahjajajajajja
Message-ID: b123467
abc
def
Kjhshjsjs
Received:
Hdjjddjdjdjdjd
我需要在'Message-ID'和'Received:'
之间保留文本我试过'@'(?:\ G(?!\ A)[X-Message-ID:] \ r?\ n(。*)(?> \ r?\ n接收:(?= S \ r?$))?“
我收到错误'找不到文字'
答案 0 :(得分:0)
如果您只有一次出现此文本,您的问题就会很简单,而您只需要在标记内提取一次文本。在这种情况下,类似下面的内容将起作用:
Message-ID:(.*?)Received:
但是如果你希望文件中有多个匹配项,那么你需要做更多的工作。这是一个应该起作用的模式:
(?:(?!Message-ID:).)*Message-ID:((?:(?!Received:)(?!Message-ID:).)*)Received:
找到此模式,然后替换为$1
。请注意,dot必须采用换行模式,这意味着.*
匹配新行(此模式已在演示中启用)。
答案 1 :(得分:0)
您可以使用
(?s)Message-ID:(.*?)Received:|.
替换为(?1$1\n)
。
<强>详情
(?s)
- 启用.
匹配换行符选项Message-ID:
- 文字子字符串(.*?)
- 第1组:尽可能少的0个字符Received:
- 文字子字符串|
- 或.
- 任意1个字符。 (?1$1\n)
替换表示如果组1匹配,则替换为组1并在其后添加换行符,否则,只删除匹配。
答案 2 :(得分:0)
What does keep mean relative to the entire sample ? – sln yesterday
有时回答问题是值得的。
查找(?s)\G(?:.*?Message-ID:(.*?)Received:|.*)
替换$1