匹配冒号前的所有内容的正则表达式是什么?

3

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

这些数据是出现在:之前,并且最好也包括:后面的空格。

例如:

Hello : Charlie想知道如何从冒号后面的内容一直删到末尾问号前面的空格。这里永远有个问号吗?

冒号和Hello会被匹配,但"Charlie said hello"不会被匹配。

感谢所有具有这种奇妙知识并抽出时间回复的人。


我看到了粗体字。这个内容是HTML吗? - Mark Thomas
当你说“冒号前的所有内容”时,你是指第一个冒号之前的所有内容还是最后一个冒号之前的所有内容? - Bryan Oakley
4个回答

7

使用

^[^:]+:\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;'

2

试试这个:

^[^:]+:\s?

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

我同意@gpojd的看法;如果负载中有冒号,则应使用负字符类来避免贪婪问题。


1
为什么 \s? - . 可以匹配空格(但不包括换行符)? - Lasse Espeholt

1
你可以只使用以下正则表达式: ^.*: 这将匹配以下内容: Hello : Charlie wants to know how to delete everything behind him from behind the colon and one space in front. I will always have this question mark on the end?

1

类似 ^.*: * 的表达式应该可以很好地工作。它匹配从行的开头到冒号及其后面的任何空格。


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