Как я могу заменить первое вхождение символа в каждом слове?
Скажем, у меня есть эта строка:
hello @jon i am @@here or @@@there and want some@thing in '@here"
# ^ ^^ ^^^ ^ ^
И я хочу удалить первое @
в каждом слове, чтобы в итоге я получил окончательную строку, подобную этой:
hello jon i am @here or @@there and want something in 'here
# ^ ^ ^^ ^ ^
Просто для пояснения, символы «@» всегда появляются вместе в каждом слове, но могут находиться в начале слова или между другими символами.
Мне удалось удалить символ «@», если он встречается только один раз, с помощью варианта регулярного выражения, найденного в подстроке Delete, когда это происходит один раз, но не дважды в строке в python , который использует отрицательный прогноз и отрицательный просмотр:
@(?!@)(?<!@@)
Смотрите вывод:
>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub(r'@(?!@)(?<!@@)', '', s)
"hello jon i am @@here or @@@there and want something in 'here"
Таким образом, следующий шаг - заменить символ «@», если он встречается более одного раза. Это легко сделать, s.replace('@@', '@')
удалив символ «@», где бы он ни появлялся снова.
Тем не менее, мне интересно: есть ли способ сделать эту замену за один выстрел?
@Hello@There
где@
бы не быть последовательным?Ответы:
Я бы сделал замену регулярного выражения по следующей схеме:
А затем просто замените на первую группу захвата, которая является непрерывными символами @, минус один.
Это должно охватывать каждое
@
вхождение в начале каждого слова, будь то слово в начале, середине или конце строки.Это печатает:
источник
Как насчет использования
replace('@', '', 1)
в выражении генератора?Значение int
1
является необязательнымcount
аргументом.str.replace(old, new[, count])
источник
replace(search, replace, max_matches)
, он просто заменяет первый в каждом слове.count
, я добавил описание из документации.Вы можете использовать ,
re.sub
как это:Это приведет к:
А вот и подтверждение концепции:
источник
Задумывался над случаями: что, если только последний символ есть
@
и вы не хотите его удалять, или у вас есть определенные разрешенные начальные символы, придумал это:Или, предположим, вы хотите заменить,
@
только если он в первых n символовисточник
DEMO
Вы можете попробовать это. Смотрите демо.
источник
Вывод:
источник