描述问题:
我有一些带有邮件标题行的文本,如
From: me
To: you
Subject: welcome, this is a long line of subject with two
lines of text
Attachements: welcome.jpg, foo.pdf
最后一行('Attachements:welcome.jpg,foo.pdf')是可选的。 所以也许这个文字看起来像
From: me
To: you
Subject: welcome, this is a short line of subject
我需要提取主题行,而不是文本'主题:'。前导和尾随空格都没问题。
我可以使用的唯一操作是单个QT-Regex调用,它只返回一个完整的匹配 。
很好,不是吗?
我尝试了成功
(?<=Subject:)(?:\s*)(.*)(?=Attachements:)
但如何制作'附件:' - 行可选?
如果没有Attachement:-line,我希望文本/字符串以Subject:-line(s)结束。
任何想法?
答案 0 :(得分:0)
您可以对(?!...)
Attachments
(?<=^Subject: )(?:(?!^Attachements:)[\s\S])+
顺便说一下。我已将.*
更改为[\S\s]*
以允许该主题中的换行符。
答案 1 :(得分:0)
您可以使用
(?<=Subject:)\s*((?:(?![\r\n]Attachements:).)*)
请参阅regex demo
模式匹配:
(?<=Subject:)
- 与字符串内的位置匹配的正向lookbehind,其中紧邻当前位置左侧有Subject:
子字符串\s*
- 0+空白字符((?:(?![\r\n]Attachements:).)*)
- 捕获匹配任何字符(QRegExp
正则表达式.
模式的第1组甚至匹配换行符),尽可能多地重复零次(*
) ,这不会启动CR / LF + Attachments:
字符序列。此构造称为tempered greedy token。