1

誰でもこれを手伝うことができますか?次のことを想像してみてください。

def example(s):
    s = s.replace('foo', 'foo bar')
    return s

これで、「foo」が「foobar」に置き換えられます。しかし、私は少し違うことをしたいと思っています。最終結果を次のようにします:'foo something bar'

そのようなチェックを行うための最良の方法は何でしょうか(「何か」がある場合は、それを保存したいと思います)。

誰でも助けてくれますか?

NM

4

5 に答える 5

8

モジュールを使用しreます。

import re
def replace(s):
     return re.sub('foo(.*)', 'foo\1 bar', s)
replace('foo something') #'foo something bar'
于 2012-09-24T22:10:56.250 に答える
3
import re
mystring = "foo something blah"
re.sub(r"foo\s+(\w+)", r"foo \1 bar", mystring)
于 2012-09-24T22:12:34.197 に答える
0

演習では、正規表現を使用しない不格好な方法:

def replace_foo(arg):
   content = arg.split()
   idx_foo = content.index("foo")
   content.insert(idx_foo+2, "bar")
   return ' '.join(content)

(しかし、あなたは本当に使うべきreです...)

于 2012-09-24T22:57:44.663 に答える
0

上記の特定の例については、次のとおりです。

import re

text = """Line 1 %find_lang %{name} has two %find_lang %{name}
occurences.

Line 4 has one %find_lang %{name}.

%find_lang %{name}

Line 6 is just the search pattern and a new line."""

print re.sub(
        '%find_lang %{name}',
        '%find_lang %{name} %{?no_lang_C}',
        text
    )
于 2012-09-24T22:43:57.700 に答える
0

次のように修正しました。

def replace_lang_macros(s):
    return re.sub(r'%find_lang(.*)', r'%find_lang\1 %{?no_lang_C}', s)

皆さんありがとう; %find_lang の後に何があってもそこに残ります...生の文字列表記がないと、奇妙な記号が表示されますが、それはそれほど難しいことではありませんでした。

于 2012-09-24T23:28:30.360 に答える