Как использовать регулярные выражения для обеспечения полноты слов при добавлении ограничения на число символов в Yahoo Pipes? - PullRequest
2 голосов
/ 24 февраля 2011

Я довольно новичок в этом, так что извините, если мой вопрос не так ясен.Я добавляю RSS-канал в Yahoo Pipes и использую Regex для его изменения.Вот что я пытаюсь сделать:

  1. Ограничить количество символов в записи, но ...
  2. Убедитесь, что элемент содержит полные слова и ...
  3. Если элемент укорочен, добавить эллипсы, но ...
  4. Если он попадает в пределы, с ним ничего не следует делать

Так что, еслиНазвание фида: "Эта статья важна" , ограничение не более 20 символов, результат должен быть "Эта статья ..." Но если заголовок "Хорошая статья " ничего не должно случиться с этим.

После некоторого исследования я думаю, что хочу объединить оператор if / then с предвкушением, т. Е. Перейти к пределу символов и, если после него есть символ пробела, добавить эллипсы, если онэто число или буква, перейдите к последнему пробелу в пределах лимита и добавьте эллипсы, но если за ним нет символов, ничего не делайте.Имеет ли это смысл?Есть ли более простой способ сделать то, к чему я иду?

Буду очень признателен за любую помощь, которую вы сможете оказать.Спасибо!

1 Ответ

3 голосов
/ 24 февраля 2011

Попробуйте заменить заголовок, используя следующий шаблон:

^(?=.{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}).*$
...