1

次の文字列が与えられます:

"-local locally local test local."

私の目的は、文字列「local」を「we」に置き換えて、結果が次のようになるようにすることです。

"-local locally we test local."

これまでのところ(stackoverflowの人たちの助けを借りて:Python:完全に一致するものを見つけてください)私は次の正規表現を思い付くことができました:

variable='local'
re.sub(r'\b%s([\b\s])' %variable, r'we\1', "-local locally local test local.")

ただし、このコードには2つの問題があります。

  1. 検索はマイナス記号を通過し、出力は次のようになります。

    '-we locally we test local.'
    

    あるべき場所

    '-local locally we test local.'
    
  2. 「-local」などのマイナス記号で始まる文字列を検索すると、検索に失敗します

4

4 に答える 4

2

スペースを区切り文字として使用して、文字列をサブ文字列に分割できます。次に、各文字列を確認し、探しているものと一致するかどうかを置き換えて、それらを再結合します。

確かに効率的ではありません:)

于 2012-10-25T20:47:24.623 に答える
2

次のことを試してください。

re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', some_string)

他の質問で提案された正規表現は\b、文字クラスではバックスペース文字を意味するため、ちょっと奇妙です。

基本的に、現在の正規表現は、最初に単語の境界があり(単語の文字から非単語の文字に、またはその逆)、最後に空白文字があるターゲット文字列を検索します。

最後の「ローカル」の後にピリオドが続くため、一致させたくないので、単語の境界がここに行く方法ではないと思います。代わりに、空白または文字列の先頭/末尾を探す必要があります。上記の正規表現が行うことです。

また、変数で使用しました。ターゲット文字列に、または通常は特別な意味を持つre.escape文字を含めると、それらはエスケープされ、リテラル文字として解釈されます。.$

例:

>>> s = "-local locally local test local."
>>> variable = 'local'
>>> re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', s)
'-local locally we test local.'
>>> variable = '-local'
>>> re.sub(r'(^|\s)%s($|\s)' % re.escape(variable), r'\1we\2', s)
'we locally local test local.'
于 2012-10-25T20:50:44.637 に答える
1
sed 's/ local / we /g' filename

私はPythonを使用していませんが、ローカルの前後にスペースを入れて検索し、代わりにスペースを含めるというアイデアです。

于 2012-10-25T20:50:48.863 に答える
0

スペースで区切られた単語のすべての出現箇所を置き換えるだけの場合は、文字列を分割して、結果のリストを操作できます。

search = "local"
replace = "we"
s = "-local locally local test local."
result = ' '.join([x if not x == search else replace for x in s.split(" ")])
于 2012-10-25T20:56:49.980 に答える