匹配正则表达式中字符串最后一个实例之后的所有字符

时间:2019-07-08 23:42:09

标签: regex

我希望捕获正则表达式中字符串最后一个实例之后的所有字符。

字符串(我们在最后一个实例之后搜索的字符串)如下,无引号:" - "\b\s\-\s\b:boundary(空格字符,后跟- ,并以空白字符开头。)

测试字符串如下:

One Thing - Two Things - Three Things - Four Things

所需匹配项:

Four Things

此正则表达式仅匹配字符串的 first 实例之后的所有内容:

(?<=\b\s\-\s\b)(.*)$

(返回,无引号:"Two Things - Three Things - Four Things"

这与最后一个单个字符 -之后的所有内容匹配:

[^\-]+$

(返回,无引号:" Four Things"

有想法吗?

4 个答案:

答案 0 :(得分:1)

尝试使用正向后视,然后否定-分隔符并获取最后结果

(?<=- )[^-]+$

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

答案 1 :(得分:1)

我认为您无需进行环视就可以找到自己的比赛。

您可以从字符串开头匹配除换行符以外的任何字符,然后匹配您的模式。那将匹配最后一个实例。

然后,在匹配0+的组中捕获除换行符以外的所有字符,直到字符串末尾。

^.*\b\s\-\s\b(.*)$
  • ^字符串的开头
  • .*匹配除换行符以外的所有字符
  • \b\s\-\s\b\匹配您的模式
  • (.*)在组1中捕获,匹配0+次除换行符以外的任何字符,
  • $字符串结尾

Regex demo

没有列出工具或编程语言,但是如果支持\K来忘记匹配的内容,则还可以使用:

^.*\b\s\-\s\b\K.*$

Regex demo

答案 2 :(得分:0)

.*(?<=\b\s\-\s\b)(.*)$,或在您当前的正则表达式should achieve what you're after,之前放置.*,因为默认情况下这是贪婪的匹配。

答案 3 :(得分:0)

这匹配字符串的结尾,而不是-之后的所有-

-\s*([^-]+)$

这是我能想到的最简单的正则表达式。