Python - 以奇怪的方式替换字符串;

时间:2012-09-24 22:04:17

标签: python string replace

任何人都可以帮忙吗?想象一下:

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

现在这将用'foo bar'取代'foo';但我想做一些不同的事情:  *想象一下,我有'foo something';我希望最终的结果是:'foo something bar'

进行此类检查的最佳方法是什么(如果有'某事',我想保留它)。

任何人都可以帮忙吗?

NM

5 个答案:

答案 0 :(得分:8)

使用re模块。

import re
def replace(s):
     return re.sub('foo(.*)', 'foo\1 bar', s)
replace('foo something') #'foo something bar'

答案 1 :(得分:3)

import re
mystring = "foo something blah"
re.sub(r"foo\s+(\w+)", r"foo \1 bar", mystring)

答案 2 :(得分: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
    )

答案 3 :(得分:0)

对于练习,一种不使用正则表达式的笨重方式:

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

(但你应该真的使用re ...)

答案 4 :(得分:0)

我刚刚修改了以下内容:

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

谢谢大家;无论在%find_lang之后的是什么,它仍然存在...没有原始字符串表示法我会得到奇怪的符号,但这并不是一个很大的挑战。