正则表达式匹配冒号前出现的所有内容?

时间:2010-10-04 19:41:50

标签: regex

我需要从RSS源中删除一些数据。

这是在之前出现的所有内容,也最好是在之后出现的空间:

示例:

你好:查理想要知道如何从冒号后面和前面的一个空格中删除身后的一切。我最后总会有这个问号吗?

哪里:和你好匹配但不是“查理打招呼”

感谢所有掌握这些知识的人,并花时间回复。

4 个答案:

答案 0 :(得分:6)

使用

^[^:]+:\s*

而不是

^.+:\s*

这是一个有效的例子:

perl -le 'my $string = q{Foo : bar baz}; $string =~ s{^[^:]+:\s*}{}; print $string;'

我建议第一个在第二个以避免贪婪问题:

perl -le 'my $string = q{Foo : bar: baz}; $string =~ s{^[^:]+:\s*}{}; print $string;'

要看到我提到的贪婪问题:

perl -le 'my $string = q{Foo : bar baz}; $string =~ s{^.+:\s*}{}; print $string;'
perl -le 'my $string = q{Foo : bar: baz}; $string =~ s{^.+:\s*}{}; print $string;'

答案 1 :(得分:2)

试试这个:

^[^:]+:\s?

尾随\s?将匹配冒号后面的空格,但不需要它。

我同意 @gpojd ;如果有效载荷中有冒号,你应该使用负字符类来避免贪婪问题。

答案 2 :(得分:1)

您可以使用: ^.*:

匹配:

Hello :查理想知道如何从冒号后面和前面的一个空格中删除身后的一切。我最后总会有这个问号吗?

答案 3 :(得分:0)

^.*: *这样的东西应该运作良好。这从行的开头到冒号以及后面的任何空格都匹配。