我有以下内容,我需要补充其中的内容:
isTranslucent
我需要提取部分文本,几乎可以使用以下正则表达式来做到这一点:
[Firstname LastName 21/06/2018 - 17:27]
Lorem Ipsum
[Foo Bar 25/01/2017 - 12:10]
Lorem Ipsum - First line
Lorem ipsum Second line
Lorem ipsum third line
Some other random text
一切正常,除了标记为\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\n*(?<note>.+)
的组外,其他所有内容都仅出现在注释的第一行。如果注释中有换行符,则换行符之后的所有内容都不会被提取。
在正则表达式找到双行换行符之前,如何才能使其与注释部分中的所有文本匹配?
答案 0 :(得分:1)
您可以查找.
或下一个方括号之前的每个字符,然后查找两个换行符,而不是寻找[^[]
(默认情况下不包括换行符)。
\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\n*(?<note>[^[]+\n\n)
答案 1 :(得分:1)
我已经修改了您的原始正则表达式,以便为您提供预期的输出。
\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\n*(?<note>.+\n?\n?)+
它应该匹配所有内容,直到双行中断为止,注意唯一的变化是在末尾。
而不是...
(?<note>.+)
现在...
(?<note>.+\n?\n?)+
编辑:更改了正则表达式,使其包含以一个换行符分隔的行,但不能包含两个换行符。
答案 2 :(得分:0)
您可以使用
\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\s*(?<note>[\s\S]+?)(?=\n{2}|$)
请参见regex demo
(?<note>[\s\S]+?)(?=\n{2}|$)
将匹配1个以上的字符,并尽可能少地匹配前2个换行符或字符串末尾。
如果您的正则表达式引擎支持\R
构造以匹配任何换行符序列,则可以使用(?=\R{2}|$)
。