【发布时间】:2020-12-14 22:04:18
【问题描述】:
你好,我对正则表达式有点陌生,有一个小问题,也许很简单。
我有给定的文字:
17.11.2020 15:32 typical Pat. seems sleeping
Additional test
17.11.2020 15:32 typical Pat. seems sleeping
Additional test
17.11.2020 15:32 typical Pat. seems sleeping
Additional test
我当前的正则表达式(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?(.*)
只匹配到睡觉,但正确匹配 3 个匹配项。
但我也需要第二组中的Additional test 文本。
我尝试了(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?([,.:\w\s]*) 之类的方法,但现在我只有一场巨大的比赛,因为第二组将所有东西都拿走了。
我怎样才能匹配所有内容,直到一个带有日期的新行开始并从那里创建一个新匹配?
【问题讨论】:
-
试试
(?m)^(\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2})[\p{Zs}\t]*(.*)\r?\n(.*),见demo。或者,(?m)^(\d{2}\.\d{2}\.\d{4}[\p{Zs}\t]\d{2}:\d{2})[\p{Zs}\t]*(.*)\r?\n(?s)(.*?)(?=\n\d{2}\.\d{2}\.\d{4}|\z) -
你在一个字符类中重复使用
\s,它也匹配换行符并且会匹配太多。您可以只取出\s并匹配该行的其余部分并匹配一个换行符。(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?(.*\r?\n.*)regex101.com/r/LjvLh0/1 -
^(\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2})\s*(.*\ r?\n?.*) 工作过@WiktorStribiżew。我使用并改变了你的,因为我不明白一些东西但仍然有效!