3

単語を置き換える方法を探していますが、引用符で囲まれていない場合に限ります。

たとえばHelloHi

Hello 'Hello' NothingHi 'Hello' Nothing

は引用符で囲まれているため'Hello'、置き換えられませんが、最初のは引用符で囲まれていないため、置き換えられHelloます。

どんな助けでも素晴らしいでしょう!

4

6 に答える 6

3

正規表現は素晴らしいです:

>>>import re

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

This string says "Hello" and Hi

それに関する唯一の問題は、「Hello and Hello」の置き換えにも失敗することです。それが問題になる場合は、それらに特定のケースを追加できます。

于 2012-05-17T19:44:19.943 に答える
1

正規表現の使用を検討してください(唯一の方法ではありませんが、私はそれを使用します)。

In [2]: print s
Hello 'Hello' Nothing
In [3]: import re
In [4]: re.sub("(?<!')Hello(?!')", 'Hi', s)
Out[4]: "Hi 'Hello' Nothing"
于 2012-05-17T19:42:49.480 に答える
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([^"\']|$)'「一重引用符または二重引用符とは異なるもので囲まれた、または行の最初または最後にある文字列Hello 」を意味します。

于 2012-05-17T19:50:58.643 に答える
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

括弧内の最初の部分と、Hiおよび2番目の部分(それらが何であれ)に置き換えられます。

于 2012-05-17T19:41:43.680 に答える
0

部分文字列関数を使用して、置換する単語のすべての出現箇所を検索します。各単語について、部分文字列関数が返すものの前の1つのインデックスを調べ、引用符であるかどうかを確認します。

例えば。「「こんにちは」「こんにちは」「何もない」

サブストリング関数は0を返します-したがって、もちろん引用符はありませんサブストリング関数は6を返します-文字列[5]をチェックします-引用符があり、次のオカレンスを探します

部分文字列関数を使用してチェックを続けるにはどうすればよいですか?このようなもの:

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

ここからあなたはそれを理解するでしょう

于 2012-05-17T19:42:58.580 に答える
0

これはテストケースで機能します。

import re
foo = "Hello 'Hello' Nothing"
mt = re.search(r"[^']Hello(\s+.*)", foo)
if mt:
   foo = 'Hi' + match.group(1)
于 2012-05-17T19:45:10.590 に答える