多线正则表达式匹配&文字包装

时间:2014-07-24 14:28:55

标签: regex

我正在尝试提取由

包装的文本
Answer:
--------

--------------------------------------------------------------------------------

示例:

Lorem ipsum dolor sit amet...
Answer:
--------
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
--------------------------------------------------------------------------------

所以预期的输出是:

Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。

非常感谢任何建议和意见。

2 个答案:

答案 0 :(得分:0)

补充正则表达式的细节太少但我会找到第一个标记的位置(--------),然后找到第二个标记的位置,然后检索它们之间的子字符串

答案 1 :(得分:0)

此正则表达式完全符合您的要求:

(?sm)Answer:\R+-{8}\R+\K.*?(?=\R+-{80})

the Regex Demo 中查看匹配。

这将在Perl和PCRE引擎中工作(例如在PHP,R和Notepad ++中可用)。在许多其他引擎上,这种变化将起作用:

(?sm)(?<=Answer:\n-{8}).*?(?=\n-{80})

请注意,在Windows上,您需要\r\n两个地方而不是\n

<强>解释

  • (?s)激活DOTALL模式,允许点跨行匹配
  • (?m)启用了多行模式,允许^$在每一行匹配
  • Answer:匹配文字字符
  • \R+匹配换行符
  • -{8}匹配八个连字符
  • \R+匹配换行符
  • \K告诉引擎放弃与最终匹配的内容
  • .*?懒惰地匹配任何字符......
  • 前瞻(?=\R+-{80})可以断言后面的内容是换行符然后是八十个连字符

<强>参考