【问题标题】:Regex combine statements to match everything after last > and before last _正则表达式组合语句以匹配最后一个 > 和最后一个 _ 之前的所有内容
【发布时间】:2018-08-01 17:54:35
【问题描述】:

对正则表达式很陌生,所以我在组合两个语句来获得输出时遇到了一些麻烦。这是我正在处理的字符串:

UI - bridge.dashboard>dashboard_dialog>ipm_dismiss_secondary_1806-ENPF-PrReEm-00-8492678

我试图提取最后一个大于号之后和最后一个下划线之前的所有内容。这将是我想要的输出:

ipm_dismiss_secondary

到目前为止,我已经能够访问大于使用此之后的所有内容:

[^>]*$

返回:

ipm_dismiss_secondary_1806-ENPF-PrReEm-00-8492678

最后一个下划线之前的所有内容都使用这个:

.*(?=\_)

返回:

UI - bridge.dashboard>dashboard_dialog>ipm_dismiss_secondary

但是,我一生都无法弄清楚如何将这两个语句组合在一起以实现所需的输出。

【问题讨论】:

    标签: sql regex


    【解决方案1】:

    试试([^>]+)_[^_]*$。第一个捕获组包含您要提取的内容。

    在捕获组之后,我们匹配一个_,将非下划线字符重复任意多次,然后匹配一个换行符。

    https://regexr.com/3tatl


    如果不满意,您可以改用positive look-aheads[^>]+(?=_[^_]*$)

    https://regexr.com/3tato

    【讨论】:

    • 第二个完美运行!第一个在第一组比赛中获得了预期的结果,这是我在尝试这样做时感到困惑的一件事。与全场比赛相比,您如何选择第 1 组比赛?现在尝试分解第二个答案,以便我了解我哪里出错了,非常感谢!
    • @Chapin23 在您的语言文档中查找“从正则表达式匹配中提取捕获组”。我真的不熟悉 SQL。
    • @Chapin23 我添加了一个链接,指向一些关于正向预测的信息。这应该可以解释第二种解决方案的工作原理。 TLDR;前瞻检查是否存在不匹配的模式。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2023-03-23
    • 2012-12-29
    相关资源
    最近更新 更多