在python中剪切或拆分字符串

时间:2018-05-04 21:52:47

标签: python string

出于某种原因,我无法做到这一点。 当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。实现这一目标的最简单或最好的方法是什么? 我在这里滚动浏览了一些旧的文档,并尝试类似地复制它,我认为剪切和切片对我来说是最令人困惑的。谢谢

1 个答案:

答案 0 :(得分:3)

既然你是从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的方式。处理程序,在这种情况下,此代码应该使用异常严重失败,而不是开始生成垃圾。