Вопрос по python – Замена слов без кавычек только в Python

3

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

Например ЗаменаHello сHi

Hello 'Hello' Nothing & # X2192;Hi 'Hello' Nothing

поскольку'Hello' в кавычках не заменяется, но первыйHello делает, потому что он не заключен в кавычки.

Любая помощь будет отличной!

Как насчетHello 'Hello Nothing' Nothing? ИлиHello this isn't going to 'work' Eric
/ Stackoverflow.com вопросы / 10501959 / ... Используйте re.sub lukecampbell
двойные кавычки или одинарные кавычки? Ashwini Chaudhary

Ваш Ответ

6   ответов
3

Регулярные выражения потрясающие:

>>>import re

>>>expression = re.compile("(?!(\"|'))Hello(?!(\"|'))")
>>>expression.sub("Hi",'This string says "Hello" and Hello')

This string says "Hello" and Hi

Единственная проблема в том, что он также не сможет заменить «Привет и Привет», если это станет проблемой, вы можете добавить для них конкретные случаи.

Это сработало! Большой user1357159
1

Рассмотрим с помощью регулярное выражение (не единственный способ, но я бы пошел с этим).

In [2]: print s
Hello 'Hello' Nothing
In [3]: import re
In [4]: re.sub("(?<!')Hello(?!')", 'Hi', s)
Out[4]: "Hi 'Hello' Nothing"
1

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

>>> import re
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "Hello mate")
'Hi mate'
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "'Hello' mate")
"'Hello' mate"

'([^"\']|^)Hello([^"\']|$)' означает «СтрокаЗдравствуйт в окружении чего-то отличного от одинарной или двойной кавычки или в начале или конце строки '.

0

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

например. "" Привет "Привет" Ничего "

ункция @Substring возвращает 0 - поэтому, конечно, нет кавычек Функция Substring возвращает 6 - проверять строку [5] - есть кавычка, ищите следующий случай

Как вы можете продолжать проверять, используя функцию подстроки? что-то вроде этого

startindex=0
while(!done):
      index=substr(string, startindex)
      if(str[index-1] == "'")
            startindex=index 
            continue

отсюда ты это поймешь

0

Это работает для вашего теста.

import re
foo = "Hello 'Hello' Nothing"
mt = re.search(r"[^']Hello(\s+.*)", foo)
if mt:
   foo = 'Hi' + match.group(1)
0

Попробуй это

import re

def callback(match):
   rep = 'Hi'
   return match.group(1)+rep+match.group(2)

your_string = "Hello 'Hello' Nothing"
print re.sub("([^\']|^)Hello([^\']|$)", callback, your_string)

Это будет соответствовать словуHello который окружен ничем, кроме' (^ в[] означает что угодно, кроме). Я также добавил|^ а также|$ чтобы соответствовать словуHello это конец или начало строки.

Он заменит его первой частью в скобках вместе с Привет и второй частью (какими бы они ни были).

Похожие вопросы