【问题标题】:Perform selective replacement on a python string?对python字符串执行选择性替换?
【发布时间】:2014-10-28 00:55:12
【问题描述】:

昨晚我试图在 Python3 中处理字符串。 如果您能帮我解决这个问题,您将非常有帮助。

所以,假设我有一个这样的字符串:

a = "√22+34-4+√(2+3)/5+√3"

注意:字符串 a 是用户输入的,每次都可能改变。

我想把字符串管理成这样:

a = "√(22)+34-4+√(2+3)/5+√(3)"

然后我可以使用a.replace("√","sqrt").将“√”替换为“sqrt”

有什么建议吗?对不起我的英语不好:) 谢谢

【问题讨论】:

  • 您要匹配的内容类似于“√ 后跟一串数字,但不是 √ 后跟括号中的表达式”,对吗?用纯粹的str 方法写起来相当困难,但用正则表达式或pyparsing 或几乎任何其他方法写起来相对容易。
  • 如果你的问题真的是关于如何修改 python 字符串:你不能(至少不是“就地”)。不过,您可以根据前一个字符串创建新字符串。 stackoverflow.com/questions/9189172/python-string-replace
  • @abarnet & Ricardo Cárdenes:我想做的是捕捉 √ 后面的数字,并在出现“+”或“-”或“*”或“/”或“(”时停止或者 ”)” 。 arshaji 的答案足以解决我的问题。我可以使用正则表达式“re”。非常感谢您的回答:)

标签: python regex string python-2.7 split


【解决方案1】:

你可以试试re.sub():

>>> import re
>>> a = "√22+34-4+√(2+3)/5+√3"
>>> re.sub(r'√(\d+)', r'√(\1)', a)  # \1 is whatever was captured by (\d+)
'√(22)+34-4+√(2+3)/5+√(3)'

但如果您需要更复杂的东西,您可能必须编写某种解析器。

【讨论】:

  • @nexus66 请注意,re.sub(...,...,a) 不会修改您的 a 字符串,而是创建一个新字符串!如果要使用新字符串(带括号的字符串)您必须将新字符串分配给变量。一个常见的模式是简单的a=re.sub(...,...,a),在其中你丢弃旧字符串以用新字符串替换它。
  • @arshajii:是的!这就是我要找的。我记得我在 Python3 课程中找到了函数 re。我会尽力理解你的答案。非常感谢您的快速回答:)
  • @gboffi:是的!这个函数的返回是一个字符串。我把它放在我的 PyGObject 代码中,它运行良好!我正在尝试使用 Python3 和 Gtk3+ 创建一个计算器。
  • @nexus66 你到底想和\d.+匹配什么?
  • @nexus66 尝试使用√(\d*\.?\d+) 作为正则表达式。
猜你喜欢
  • 2012-08-11
  • 2012-08-01
  • 2020-08-28
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2023-03-09
  • 2020-12-25
相关资源
最近更新 更多