正则表达式 – 匹配某些字符后的文字

我想从一些文本中抓取数据并将其转储到数组中。 请考虑以下文本作为示例数据:

| Example Data | Title: This is a sample title | Content: This is sample content | Date: 12/21/2012 

我目前正在使用以下正则表达式来刮取“冒号”字符后指定的数据:

 /((?=:).+)/ 

不幸的是,这个正则表达式也抓住了结肠和结肠后的空间。 我如何只获取数据?

此外,我不确定我是否正确这样做..但似乎外部的parens导致匹配返回一个数组。 这是parens的function吗?

编辑:我正在使用Rubular来测试我的正则表达式

您可以将其更改为:

 /: (.+)/ 

并且抓住第1组的内容。但是,后视也是有效的,而且正是你所要求的:

 /(?<=: ).+/ 

除了@minitech的答案,你还可以做出第三个变化:

 /(?<=: ?)(.+)/ 

不同之处在于,您使用后视创建/抓取组。

如果你仍然喜欢先行而不是后视概念。 。 。

 /(?=: ?(.+))/ 

这将在您现有的正则表达式周围放置一个分组,它将在一个组中捕获它。

是的,代码中的外部括号匹配。 与后一个例子相比,我给出了整个预测被“分组”的地方,而不是不必要地使用/(...)/没有/(?= ... )/ ,因为大多数正则表达式中的第一个结果引擎返回整个匹配的字符串。

我知道你要求正则表达式,但我刚看到正则表达式解决方案,并发现对那些不熟悉正则表达式的人来说很难阅读。

我也使用Ruby,我决定这样做:

 line_as_string.split(": ")[-1] 

这可以满足您的需求,恕我直言,它更具可读性。 对于很长的字符串,它可能效率低下。 但不是为了这个目的。