正则表达式:选择最后一个下划线和点之间的所有文本

3

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

该字符串如下:

20190502_PO_TEST.pdf

这包括.pdf部分。我需要检索最后一个下划线(_)和点号(.)之间的部分,剩下TEST。
我尝试过以下方法:
[^_]+$

这会返回: TEST.PDF
我也尝试了这个:
_(.+)\.

这个代码返回: PO_TEST
1个回答

2
这个模式[^_]+$将匹配到除了字符串结尾的下划线,并且也会匹配.
在这个模式_(.+).中,你需要用转义符号来匹配句点,就像这样_(.+)\.,可以参考演示,然后你的匹配结果将在第一个捕获组中。
你还可以使用以下内容:
^.*_\K[^.]+
  • ^.*_ 匹配最后一个下划线
  • \K 忘记已匹配的内容
  • [^.]+ 匹配零次或多次非点号字符

正则表达式演示


"Original Answer" 翻译成 "最初的回答"

对于边缘情况或“T_.txt”,请尝试使用^.*_\K[^._]* - user3458
@Arkadiy 这可能是一种可能性,只是这不会匹配任何内容,因为在最后一个下划线和点之间没有文本。 - The fourth bird
相反,它将匹配最后一个“_”和“.”之间的空字符串:_<emptystring>。 - user3458
@Arkadiy 好的,如果 OP 也想匹配空字符串,那么可以使用 ^.*_\K[^.]*。由于已经匹配了最后一个下划线,因此可以从字符类中删除多余的 _ - The fourth bird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接