我有一个很长的字符串,我已经通过beautifulsoup进行了解析,我需要有关从这个汤对象中提取数据的最佳方法的建议。
我想要的数字包含在汤对象内,在此文本之后的内部()。
查看全部(8)
找到它的最有效方法是什么,并从中获取数字。
在VBA中,我会这样做。
(1)如果汤是长度1000文本是200
,则查找此文本字符串的开始位置然后我会循环,直到找到结尾),抓取该文本,将其存储在变量中,并处理每个字符,删除所有不是数字的字符。
所以,如果我有>查看全部(8)我最终会以 8 结束。这里的数字是未知的,可能是q00,110或2000。
我刚刚开始学习python,还不知道如何使用正则表达式,但这似乎还有什么路要走? p>
示例字符串
">View All (90)</a>
预期结果 - 充满希望
90
示例字符串
">View All (8)</a>
预期结果 - 充满希望
8
答案 0 :(得分:1)
看到我的评论如何引发更多问题,让我稍微扩展一下。首先,欢迎来到正则表达式的精彩世界。正则表达式可能非常令人头疼,但掌握它们是一项非常有用的技巧。 A.M.编写了一个非常清晰的教程。 Kuchling,早期Python的老黑客之一。如果记忆为我服务,他写了re
库,作为额外的奖励,在大约15个奇数行的python中没有文档执行lex。但我离题了。你可以在这里找到教程。 https://docs.python.org/2/howto/regex.html
让我一点一点地看一下表达式:
m = re.compile(r'View All \((\d*?)\)').search(soupstring);
print m.group(1)
引号前面的r
标记为Python中的原始字符串。 Python将预处理正常的字符串文字,因此反斜杠被解释为特殊字符。例如。字符串中的'\t'
将替换为制表符。试试print '\'
看看我的意思。要在字符串中包含'\'
,您必须像'\\'
一样将其转义。这可能是一个问题,因为反斜杠也是正则表达式引擎的转义字符。如果必须匹配包含反斜杠的模式,您很快就会编写类似'\\\\'
的模式。这可能很有趣。 。 。如果您喜欢50种灰度,请尝试一下。
在正则表达式语言中:'('
字符是特殊的。它们用于将匹配的部分组合在一起。由于您只对括号之间的数字感兴趣,因此我使用组来提取此数据。其他特殊字符是'{', '[', , '*', '?', '\'
及其匹配的对应字符。我相信我已经忘记了一些,但你可以查阅它们。
有了这些信息,'\('
会更有意义。由于我已经转义了'('
,它告诉正则表达式解析器忽略'('
的特殊含义,而是将其与文字'('
字符匹配。
序列'\d'
再次特殊。转义'\d'
表示不要将其解释为文字'd'
,而是将其解释为&#34;任何数字字符&#34;。
'*'
表示采用最后一种模式并将其匹配零次或多次。
'*?'
变种意味着,使用&#34;贪婪匹配&#34;。这意味着返回第一个可能的匹配,而不是找到最长的匹配。在正则表达式的上下文中,贪婪通常是好的。正如塞巴斯蒂安所指出的,这里不需要'?'
。但是,如果您需要查找html元素或带引号的字符串,则可以使用'<.*?>'
或'".*?"'
。
请注意'.'
再次特别。这意味着匹配&#34;任何角色(除了换行符(无论如何大部分时间))&#34;。
玩得开心。 。