2011-02-24 42 views
2

我对此很新,所以如果我的问题不明确,请原谅。我将一个RSS Feed拉入Yahoo Pipes并使用Regex进行修改。这里就是我想要做的事:如何使用正则表达式确保完整的单词,同时为Yahoo管道添加字符限制?

  1. 限制在一个条目中的字符数,但...
  2. 确保项目包括完整的单词,并...
  3. 如果该项目是缩短,添加一个椭圆,但是...
  4. 如果落在范围内没有任何应该做它

因此,如果饲料的标题是:“这篇文章很重要,”和限制是20个字符,th e结果应该是“这篇文章是......”但是如果标题是“好文章”,什么都不应该发生。

做了一些研究之后,我认为我想要将if/then语句与lookahead结合起来,即转到字符限制,如果在它后面有一个字符,那是一个空格,则添加一个省略号,如果它是数字或字母,到达限制内的最后一个空格并添加一个省略号,但如果后面没有任何字符,则不要执行任何操作。这有意义吗?有没有更简单的方法去做我要做的事情?

我真的很感谢你可以提供任何帮助。谢谢!

回答

3

尝试使用以下方式替换标题:

^(?=.{23})(.{0,20})(?=\s).*$ 

以字符串

$1... 

工作例如:http://pipes.yahoo.com/pipes/pipe.info?_id=04158a7a5ea390b1b0b78ebccadcec79

它是如何工作的?

  • (?=.{23}) - 首先,我们检查的长度至少为23(这是20 +“...”,你可以用玩)
  • (.{0,20}) - 比赛最多20个字符第一组
  • (?=\s) - 确保最后一个字符后面有空格。如果没有,它会尝试匹配更少的字符。
  • .* - 一直匹配到最后,所以剩下的行被删除。

这里的边缘案例是一个长于20个字符的单个单词。如果这是一个问题,您可以通过使用解决它:

^(?=.{23})(.{0,20}(?=\s)|\S{20}).*$ 
+0

这个伟大的工程,虽然有当我把它应用到“说明”字段中的一个小problem-,似乎在饲料中的任何一种线突破打破了正则表达式。下面是我尝试使用的管道:[链接](http://pipes.yahoo.com/pipes/pipe.info?_id=6a84aedb28fa087f64632d44f1d9353a>) 正如你所看到的,当在这里有一个换行符时饲料,它只是返回“...“我已经尝试从Feed中剥离HTML,以防止这种情况发生,但这并不奏效。任何想法? – Mike 2011-02-25 18:51:03

+0

通过用普通空间替换所有/ s来修复它。由于某些原因,Yahoo Pipes没有像三重线断。 – Mike 2011-03-01 20:05:10

相关问题