【问题标题】:How to replace part of str using `re.sub()`?如何使用`re.sub()`替换部分字符串?
【发布时间】:2016-02-06 01:09:09
【问题描述】:

我可以将oldText 替换为newText1re.sub("'(.*)'", 'newText', "test = 'oldText'") 但我正在尝试将re.sub() 用作re.sub("'test = (.*)'", 'newText', "test = 'oldText'")

我可以通过模式传递实际文本吗?

我认为数字是我用 str 更新的坏例子。第一个有效,但第二个无效。模式中不允许有实际文本吗?

【问题讨论】:

  • 模式'test = (.*)'将不匹配test = '21',因为引用位置不同
  • 你为什么把它标记为正则表达式环视?你想要的结果是什么?更正您对单引号的使用和不使用 22 左右的引号,您仍然将整个字符串替换为“22”。这是想要的结果吗?
  • @dawg:嗯,确实如此,因为.* 匹配所有的东西。
  • 如上所述,您的问题在于 a) 正确使用引号,b) int 和 str 类型之间的混淆。请花一些时间阅读简单的示例或重新模块教程页面。享受;-)
  • 它的问题是当我在模式中添加文本时,如果我只有模式就可以了

标签: python regex python-2.7 regex-lookarounds


【解决方案1】:
>>> import re
>>> 
>>> re.sub(r"(test = )'.*'", r"\1'" + str(22) + r"'", "test = '21'")
"test = '22'"

你可以做到,但你需要抓住比赛的所有其他部分并将其与新结果拼凑起来。

【讨论】:

  • 是的,它被称为反向引用。在合理范围内,您可以为每组括号设置一个。
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 2014-10-12
  • 1970-01-01
  • 2013-04-26
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多