単語を置き換える方法を探していますが、引用符で囲まれていない場合に限ります。
たとえばHello
、Hi
Hello 'Hello' Nothing
→Hi 'Hello' Nothing
は引用符で囲まれているため'Hello'
、置き換えられませんが、最初のは引用符で囲まれていないため、置き換えられHello
ます。
どんな助けでも素晴らしいでしょう!
単語を置き換える方法を探していますが、引用符で囲まれていない場合に限ります。
たとえばHello
、Hi
Hello 'Hello' Nothing
→Hi 'Hello' Nothing
は引用符で囲まれているため'Hello'
、置き換えられませんが、最初のは引用符で囲まれていないため、置き換えられHello
ます。
どんな助けでも素晴らしいでしょう!
正規表現は素晴らしいです:
>>>import re
>>>expression = re.compile("(?!(\"|'))Hello(?!(\"|'))")
>>>expression.sub("Hi",'This string says "Hello" and Hello')
This string says "Hello" and Hi
それに関する唯一の問題は、「Hello and Hello」の置き換えにも失敗することです。それが問題になる場合は、それらに特定のケースを追加できます。
正規表現の使用を検討してください(唯一の方法ではありませんが、私はそれを使用します)。
In [2]: print s
Hello 'Hello' Nothing
In [3]: import re
In [4]: re.sub("(?<!')Hello(?!')", 'Hi', s)
Out[4]: "Hi 'Hello' Nothing"
正規表現の使用:
>>> 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([^"\']|$)'
「一重引用符または二重引用符とは異なるもので囲まれた、または行の最初または最後にある文字列Hello 」を意味します。
これを試して:
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
括弧内の最初の部分と、Hiおよび2番目の部分(それらが何であれ)に置き換えられます。
部分文字列関数を使用して、置換する単語のすべての出現箇所を検索します。各単語について、部分文字列関数が返すものの前の1つのインデックスを調べ、引用符であるかどうかを確認します。
例えば。「「こんにちは」「こんにちは」「何もない」
サブストリング関数は0を返します-したがって、もちろん引用符はありませんサブストリング関数は6を返します-文字列[5]をチェックします-引用符があり、次のオカレンスを探します
部分文字列関数を使用してチェックを続けるにはどうすればよいですか?このようなもの:
startindex=0
while(!done):
index=substr(string, startindex)
if(str[index-1] == "'")
startindex=index
continue
ここからあなたはそれを理解するでしょう
これはテストケースで機能します。
import re
foo = "Hello 'Hello' Nothing"
mt = re.search(r"[^']Hello(\s+.*)", foo)
if mt:
foo = 'Hi' + match.group(1)