1

任何人都可以帮助解决这个问题吗?想象一下:

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

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

进行此类检查的最佳方法是什么(如果有“东西”,我想保留它)。

任何人都可以帮忙吗?

纳米

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

对于您上面提到的具体示例:

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_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

我刚刚用以下方法修复了它:

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 回答