首页 > 解决方案 > 在python中剪切或拆分字符串

问题描述

由于某种原因,我无法弄清楚这一点。当 py 脚本打印输出时,我有一个类似的字符串(必须隐藏一些信息):

<input name="submit" onclick="var srvstr='Friday 4th of May 2018';someweb(srvstr);document.someemail.securitystring.value='';return false;" src="images/button-submit.png" type="image"/>

我只想Friday 4th of May 2018从字符串中获取。实现这一目标的最简单或最好的方法是什么?我在这里浏览了一些旧文档,并尝试类似地复制它,我认为切割和切片对我来说是最令人困惑的。谢谢

标签: pythonstring

解决方案


既然你是从 BeautifulSoup 中得到这个的,你可能正在做这样的事情来获取input标签:

>>> str(tr.input)
'<input name="submit" onclick="var srvstr=\'Friday 4th of May 2018\';someweb(srvstr);document.someemail.securitystring.value=\'\';return false;" src="images/button-submit.png" type="image"/>'

相反,让 BS4 一直解析到onclick属性值:

>>> tr.input['onclick']
"var srvstr='Friday 4th of May 2018';someweb(srvstr);document.someemail.securitystring.value='';return false;"

当然,它仍然很混乱,但并没有那么糟糕——而且,更重要的是,我们知道它是引用的 Javascript 代码以适应 HTML。所以我们知道什么可以和不可以在其中不逃避,所以我们不必担心很多否则可能永远不会发生但你不能确定的事情(因此肯定会在 15 分钟后发生)您部署并进入睡眠状态)。

>>> re.search(r"srvstr='(.*?)'", tr.input['onclick'])
<_sre.SRE_Match object; span=(4, 35), match="srvstr='Friday 4th of May 2018'">
>>> re.search(r"srvstr='(.*?)'", tr.input['onclick']).group(1)
'Friday 4th of May 2018'

现在我们不必对他们的日期格式进行逆向工程,希望我们做对了;这只是他们在该srvstr变量中放入的任何字符串。(尽管如果您真的想将其解析为datetime对象或其他东西……)

当然,你永远无法保证解析其他人的文本,但如果这停止工作,那似乎很可能是因为他们已经完全改变了他们onclick处理处理程序的方式,在这种情况下,这段代码应该因异常而严重失败,而不是开始产生垃圾。


推荐阅读