Я использую простую функцию, которая перечисляет все вхождения, выбирает позицию n-го места и использует ее для разделения исходной строки на две подстроки. Затем он заменяет первое вхождение во второй подстроке и присоединяет подстроки обратно к новой строке:
import re
def replacenth(string, sub, wanted, n)
where = [m.start() for m in re.finditer(sub, string)][n-1]
before = string[:where]
after = string[where:]
after = after.replace(sub, wanted, 1)
newString = before + after
print newString
Для этих переменных:
string = 'ababababababababab'
sub = 'ab'
wanted = 'CD'
n = 5
выходов:
ababababCDabababab
Примечания:
Переменная
where
на самом деле представляет собой список позиций совпадений, в которых вы выбираете n-й. Но индекс элемента списка начинается с0
обычно, а не с1
. Поэтому существует индексn-1
, аn
- фактическая n-я подстрока. Мой пример находит 5-ю строку. Если вы используете индексn
и хотите найти 5-ю позицию, вам нужноn
быть4
.Это должно быть самым простым способом, но, возможно, это не самый путинский путь, потому что конструкция переменной
where
требует импортаre
библиотека. Возможно, кто-то найдет еще более питоновский путь.Источники и некоторые ссылки дополнительно:
blockquote>
where
construction: Найти все вхождения подстроки в Python- разбиение строк: https://www.daniweb.com/programming/software-development/threads/452362/replace-nth-occurrence-of-any-sub-string- in-a-string
- аналогичный вопрос: Найти n-е вхождение подстроки в строку
Небольшая модификация первоначального ответа:
$('#Clicker').mousedown(function () {
//do something here
timeout = setInterval(function () {
//do same thing here again
}, 500);
return false;
});
$('#Clicker').mouseup(function () {
clearInterval(timeout);
return false;
});
$('#Clicker').mouseout(function () {
clearInterval(timeout);
return false;
});
При событии mouseout на Clicker оно останавливается, когда вы перемещаете мышь из области щелчка.
Причина, по которой я предлагаю сделать одно и то же дважды, состоит в том, чтобы получить более плавный эффект. Если вы не сделаете это один раз до того, как будет установлено время ожидания, в этом случае будет задержка в 500 мс, прежде чем что-то произойдет.
$.fn.click2=function(cb,interval){
var timeout;
if(!interval) interval=100;
$(this).mousedown(function () {
var target=this;
timeout = setInterval(function(){
cb.apply(target);
}, interval);
return false;
}).mouseup(function () {
clearInterval(timeout);
return false;
}).mouseout(function () {
clearInterval(timeout);
return false;
});
}