正则表达式匹配特定字符串后的文本,直到另一个特定字符串

时间:2018-03-03 18:33:48

标签: regex python-3.5

如果我有以下示例:

var directoryDialog = new CommonOpenFileDialog
  {
     IsFolderPicker = true,
     Title = "Select Folder"
  };

如何选择文字

X-FileName: pallen (Non-Privileged).pst

Here is our forecast

 Message-ID: <15464986.1075855378456.JavaMail.evans@thyme>

在“X-FileName .... \ n”之后直到“Message-ID”被执行?

我读到了关于前瞻和后方并尝试了这一点但没有奏效:

Here is our forecast 

2 个答案:

答案 0 :(得分:0)

这应该这样做:

(?:X-FileName:[^\n]+)\n+([^\n]+)\n+(?:Message-ID:)(组#1是匹配)

Demo

说明:

(?:X-FileName:[^\n]+)匹配X-Filename:后跟任意数量的非换行符,而不捕获它(?:)。

\n+匹配任意数量的连续换行符。

([^\n]+)匹配并捕获任何不是换行符的连续字符。

\n+再次匹配任意数量的连续换行符。

(?:Message-ID:)匹配Message-ID:而未捕获它(?:)。

修改:正如@WiktorStribiżew所提到的那样,将文本拆分成行可能是一种更简单/更清晰的方式来检索您想要的内容。

答案 1 :(得分:0)

这里有两种方法,它们取决于更广泛的背景。如果您的预期子字符串是第二段,则只需使用\n\n(或\r\n\r\n)进行拆分,然后从结果列表中获取第二项。

如果是某个较大文本中的文本,请使用正则表达式。

参见Python演示:

import re
s='''X-FileName: pallen (Non-Privileged).pst

Here is our forecast

Message-ID: <15464986.1075855378456.JavaMail.evans@thyme>'''
# Non-regex way for the string in the exact same format
print(s.split('\n\n')[1])
# Regex way to get some substring in a known context
m = re.search(r'X-FileName:.*[\r\n]+(.+)', s)
if m:
    print(m.group(1))

正则表达式意味着:

  • X-FileName: - 文字子字符串
  • .* - 除了换行符之外的任何0 +字符
  • [\r\n]+ - 一个或多个CR或LF字符
  • (.+) - 第1组:除了换行符之外的一个或多个字符,尽可能多。

请参阅regex demo