任何人都可以帮助解决这个问题吗?想象一下:
def example(s):
s = s.replace('foo', 'foo bar')
return s
现在这将用 'foo bar' 替换 'foo';但我想做一些不同的事情:*想象我有'foo something';我希望最终结果是:'foo something bar'
进行此类检查的最佳方法是什么(如果有“东西”,我想保留它)。
任何人都可以帮忙吗?
纳米
使用re
模块。
import re
def replace(s):
return re.sub('foo(.*)', 'foo\1 bar', s)
replace('foo something') #'foo something bar'
import re
mystring = "foo something blah"
re.sub(r"foo\s+(\w+)", r"foo \1 bar", mystring)
对于您上面提到的具体示例:
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
)
对于练习,一种不使用正则表达式的笨拙方式:
def replace_foo(arg):
content = arg.split()
idx_foo = content.index("foo")
content.insert(idx_foo+2, "bar")
return ' '.join(content)
(但你真的应该使用re
......)
我刚刚用以下方法修复了它:
def replace_lang_macros(s):
return re.sub(r'%find_lang(.*)', r'%find_lang\1 %{?no_lang_C}', s)
谢谢大家;无论 %find_lang 之后是什么,它都会保留在那里......如果没有原始字符串表示法,我会得到奇怪的符号,但这并不是什么大挑战。