Как заменить все пробелы в строке, если пробелы заключены в кавычки в Python? - PullRequest
1 голос
/ 18 июня 2020

У меня есть список l.

l = ["This is","'the first 'string","and 'it is 'good"]

Я хочу заменить все пробелы на «| пробел |» в строках, которые находятся внутри.

print (l)
# ["This is","'the|space|first|space|'string","and 'it|space|is|space|'good"]

Я не могу использовать a для l oop внутри a для l oop и напрямую использовать .replace (), поскольку строки не изменяемы

TypeError: объект 'str' не поддерживает назначение элементов

Я видел следующие вопросы, и ни один из них мне не помог.

Замена строковый элемент in for l oop Python (3 ответа)

Запуск метода replace () в for l oop? (3 ответа)

Заменить строки с помощью составления списков (7 ответов)

Я рассматривал возможность использования re.sub, но не могу придумать подходящего регулярного выражения, которое выполнит эту работу.

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Это работает для меня:

>>> def replace_spaces(str) :
...     parts = str.split("'")
...     for i in range(1,len(parts),2) :
...         parts[i] = parts[i].replace(' ', '|')
...     return "'".join( parts )
... 
>>> [replace_spaces(s) for s in l]
['This is', "'the|first|'string", "and 'it|is|'good"]
>>> 
1 голос
/ 18 июня 2020

Использование regex text-munging:

import re

l = ["This is","'the first 'string","and 'it is 'good"]

def repl(m):
  return m.group(0).replace(r' ', '|space|')

l_new = []
for item in l:
  quote_str = r"'.+'"
  l_new.append(re.sub(quote_str, repl, item))


print(l_new)

Вывод:

['This is', "'the|space|first|space|'string", "and 'it|space|is|space|'g
ood"]

Полный лог c в основном:

  1. L oop через элементы l.
  2. Найдите string between single quotes. Передайте это функции repl. Функция
  3. repl Я использую простой replace для замены spaces with |space|.

Ссылка для text-munging => https://docs.python.org/3/library/re.html#text -munging

1 голос
/ 18 июня 2020

Думаю, я решил вашу проблему замены регулярным выражением. Возможно, вам придется изменить sh данный фрагмент кода в соответствии с вашими потребностями.

Если я правильно понял вопрос, уловка заключалась в том, чтобы использовать регулярное выражение для поиска подходящего места для замены.

match = re.findall(r"\'(.+?)\'", k) #here k is an element in list.

Размещение скелетного кода для справки:

import re

l = ["This is","'the first 'string","and 'it is 'good"]

#declare output

for k in l:
    match = re.findall(r"\'(.+?)\'", k)
    if not match:
        #append k itself to your output
    else:
        p = (str(match).replace(' ', '|space|'))
        #append p to your output

Я еще не тестировал его, но он должен работать. Сообщите мне, если у вас возникнут проблемы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...