【问题标题】:REGEX: Select all text between last underscore and dot正则表达式:选择最后一个下划线和点之间的所有文本
【发布时间】:2019-11-03 06:03:39
【问题描述】:

我在检索字符串的特定信息时遇到问题。

字符串如下:

20190502_PO_TEST.pdf

这包括 .pdf 部分。我需要检索最后一个下划线 (_) 和点 (.) 之间的部分,让我留下 TEST

我试过这个:

[^_]+$

然而,这会返回: 测试.PDF

我也试过这个:

_(.+)\.

这会返回: PO_TEST

【问题讨论】:

    标签: regex string notepad++


    【解决方案1】:

    此模式 [^_]+$ 将不匹配字符串末尾的下划线,并且还将匹配 .

    在这种模式_(.+). 中,您必须转义点以匹配它,就像_(.+)\. 一样,请参阅demo,然后您的匹配项将在第一个捕获组中。

    你还可以使用什么:

    ^.*_\K[^.]+
    
    • ^.*_匹配最后一个下划线
    • \K忘记匹配的内容
    • [^.]+ 匹配 0+ 次而不是一个点

    Regex demo

    【讨论】:

    • 对于边缘情况或“T_.txt”,请尝试^.*_\K[^._]*
    • @Arkadiy 这可能是一种可能性,只是不会匹配任何内容,因为最后一个下划线和点之间没有文本。
    • @Thefourthbird 相反,它会匹配最后一个_.之间的空字符串:_<emptystring>.
    • @Arkadiy 好吧,在这种情况下,如果还需要匹配一个空字符串,OP 可能会使用^.*_\K[^.]*。您可以从字符类中删除多余的_,因为您已经匹配了最后一个下划线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2016-11-17
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多