使用正则表达式捕获第一部分,跳过中间部分,捕获最后一部分

时间:2019-02-13 19:51:54

标签: regex

我有几行类似于下面的示例,我想捕获第一个括号中的所有内容,然后捕获some texts部分中的所有内容。

{Foo} - {Bar} - some texts

预期结果:{Foo} - some texts

所有文本和方括号中的文本都将不同,因此我需要基于{}-来捕获我所需要的内容。

我想出的一切都放在第一个括号\{(.*?)\}中。但是,我不太确定如何跳过中间部分,而只是抓住some texts。我正在使用环视断言,这是解决此问题的最佳方法吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

使用2个捕获组排除中间

Billing enabled default limit
     

☝☝
                   从此处替换为.......................... \ s- \ s

此模式将匹配同一行和/或多行的倍数。


演示

 /(\{.+?\})\s-\s\{.+?\}\s-\s(.+?)\b/gi;

答案 1 :(得分:0)

这在perl中有效,它会跳过所有内容,直到.+\} -为止,然后匹配剩下的内容:

$ cat x.pl
use strict;

my $str = '{Foo} - {Bar} - some texts';

if ($str =~ /\{(.*?)\}.+\} - (.+)/) {
    print "$1, $2\n";
}


$ perl x.pl
Foo, some texts

答案 2 :(得分:0)

以下正则表达式应与/({[^}]+})(?:.+})?(.+)/一起使用,其中capture group 1包含 {Foo} ,并且capture group 2包含一些文本