gpt4 book ai didi

regex - 获取所有字符,直到找到新的日期/小时

转载 作者:行者123 更新时间:2023-12-02 03:22:57 24 4
gpt4 key购买 nike

我必须用正则表达式解析很多内容。例如,内容可能是:

14-08-2015 14:18 : Example : Hello =) How are you?
What are you doing?
14-08-2015 14:19: Example2 : I'm fine thanks!

我有这个正则表达式,它当然会返回 2 个匹配项,以及我需要的组 - 数据、小时、名称、多行消息:

(\d{2}-\d{2}-\d{4})\s?(\d{2}:\d{2})\s?:([^:]+):([^\d]+)

问题是,如果在消息中写入了一个数字,这就不行了,因为正则表达式将停止获取更多字符。例如,在这种情况下,这是行不通的:

14-08-2015 14:18 : Example : Hello =) How are you?
What are you 2 doing?
14-08-2015 14:19: Example2 : I'm fine thanks!

如何在找到新日期/小时之前获取所有字符?

最佳答案

问题出在您的最终捕获组 ([^\d]+) 上。

相反,您可以使用 ((?:(?!\d{2}-\d{2}-\d{4})[\s\S])+)

外括号:((?:(?!\d{2}-\d{2}-\d{4})[\s\S])+ ) 表示捕获组

下一组括号:((?:(?!\d{2}-\d{2}-\d{4})[\s\S] )+) 表示我们想要匹配 1 到无限次的非捕获组。

在内部我们有一个消极的展望:((?:(?!\d{2}-\d{2}-\d{4})[\s\S]) +).这表示我们匹配的任何内容都不能包含日期。

我们实际捕获的是:((?:(?!\d{2}-\d{2}-\d{4})[\s\S])+) 意味着我们捕获每个字符,包括换行符。

整个有效的正则表达式如下所示:

(\d{2}-\d{2}-\d{4})\s?(\d{2}:\d{2})\s?:([^:] +):((?:(?!\d{2}-\d{2}-\d{4})[\s\S])+)

https://regex101.com/r/wH5xR2/2

关于regex - 获取所有字符,直到找到新的日期/小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32011229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com