【问题标题】:Regex- How to capture everything up until another named capture group正则表达式-如何捕获所有内容,直到另一个命名的捕获组
【发布时间】:2022-06-15 04:42:29
【问题描述】:

我有以下文字:

J.smith (2022-05-02 01:22:02) Hi There,

How are you doing today

Just wanted to check in

Bobby123 (2022-05-02 07:39:00):Hello ,

Im doing good thank you for asking

Thanks!

我想要三个命名的捕获组,分别是名称、时间和文本:

Bobby123

2022-05-02 01:22:02

Hello ,

Im doing good thank you for asking

Thanks!

我的主要问题是尝试为文本创建一个命名的捕获组。我尝试的每个正则表达式都会捕获文本的所有内容,但是文本组在到达 Bobby123 的第二个命名捕获组(名称)后应该停止。

这是我目前所拥有的:

(?<by>([\S]+)) \((?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\)\: 

https://regex101.com/r/VCIUH9/1

【问题讨论】:

  • 使用该模式停止:(?&lt;by&gt;\S+) \((?&lt;time&gt;\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\):.*(?:\n(?!\S+ \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\):).*)* - 请参阅regex101.com/r/VCIUH9/2
  • 谢谢。如果我想将文本放在自己命名的捕获组中怎么办?

标签: regex


【解决方案1】:

你可以使用

(?<by>\S+) \((?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\):.*(?:\n(?!\S+ \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\):).*)*

请参阅regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多