Python объединяет отдельные символы в строку - PullRequest
0 голосов
/ 17 мая 2019

Ввод:

str1 = "a b abcd a b"

Требуемый вывод:

"ab abcd ab"

Как убрать пробел между одиночными символами строки?

Полагаю, я не могу использовать split и join, так как он будет разбивать все на токены, а затем не будет заботиться о длине подстрок.

Ответы [ 2 ]

3 голосов
/ 17 мая 2019

Вот опция, использующая re.sub. Мы можем сопоставить по следующей схеме:

(?<=\b[a-z]) (?=[a-z]\b)

и затем замените его пустой строкой, чтобы удалить целевое пространство.

input = "a b abcd a b"
output = re.sub(r'(?<=\b[a-z]) (?=[a-z]\b)', '', input)
print(output)

ab abcd ab

Используемый шаблон регулярных выражений говорит:

(?<=\b[a-z])   assert that what precedes is a single letter, which itself
               is preceded by a word boundary
[ ]            match a single space (brackets used for clarity only)
(?=[a-z]\b)    assert that what follows is also a single letter, which again
               is followed by a word boundary
1 голос
/ 17 мая 2019

Вы также можете думать об этом наоборот: дополнить длинные строки

def padLong(item):
    if len(item) == 1:
        return item
    return ' ' + item + ' '

str1 = "a b abcd a b abc abcd"

strs = str1.split()
print(strs)

strs = ''.join([padLong(item) for item in strs])
print(strs)

strs = strs.split()
strs = ' '.join(strs)
print(strs)

Выход:

['a', 'b', 'abcd', 'a', 'b', 'abc', 'abcd']
ab abcd ab abc  abcd 
ab abcd ab abc abcd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...