在python中找到字符串的出现

时间:2014-05-27 06:58:32

标签: python string text find beautifulsoup

我有一个很长的字符串,我已经通过beautifulsoup进行了解析,我需要有关从这个汤对象中提取数据的最佳方法的建议。

我想要的数字包含在汤对象内,在此文本之后的内部()。

查看全部(8)

找到它的最有效方法是什么,并从中获取数字。

在VBA中,我会这样做。

(1)如果汤是长度1000文本是200

,则查找此文本字符串的开始位置

然后我会循环,直到找到结尾),抓取该文本,将其存储在变量中,并处理每个字符,删除所有不是数字的字符。

所以,如果我有>查看全部(8)我最终会以 8 结束。这里的数字是未知的,可能是q00,110或2000。

我刚刚开始学习python,还不知道如何使用正则表达式,但这似乎还有什么路要走?

示例字符串

">View All (90)</a>

预期结果 - 充满希望

90

示例字符串

">View All (8)</a>

预期结果 - 充满希望

8

1 个答案:

答案 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)
  1. 引号前面的r标记为Python中的原始字符串。 Python将预处理正常的字符串文字,因此反斜杠被解释为特殊字符。例如。字符串中的'\t'将替换为制表符。试试print '\'看看我的意思。要在字符串中包含'\',您必须像'\\'一样将其转义。这可能是一个问题,因为反斜杠也是正则表达式引擎的转义字符。如果必须匹配包含反斜杠的模式,您很快就会编写类似'\\\\'的模式。这可能很有趣。 。 。如果您喜欢50种灰度,请尝试一下。

  2. 在正则表达式语言中:'('字符是特殊的。它们用于将匹配的部分组合在一起。由于您只对括号之间的数字感兴趣,因此我使用组来提取此数据。其他特殊字符是'{', '[', , '*', '?', '\'及其匹配的对应字符。我相信我已经忘记了一些,但你可以查阅它们。

  3. 有了这些信息,'\('会更有意义。由于我已经转义了'(',它告诉正则表达式解析器忽略'('特殊含义,而是将其与文字'('字符匹配。

  4. 序列'\d'再次特殊。转义'\d'表示不要将其解释为文字'd',而是将其解释为&#34;任何数字字符&#34;。

  5. '*'表示采用最后一种模式并将其匹配零次或多次。

  6. '*?'变种意味着,使用&#34;贪婪匹配&#34;。这意味着返回第一个可能的匹配,而不是找到最长的匹配。在正则表达式的上下文中,贪婪通常是好的。正如塞巴斯蒂安所指出的,这里不需要'?'。但是,如果您需要查找html元素或带引号的字符串,则可以使用'<.*?>''".*?"'

  7. 请注意'.'再次特别。这意味着匹配&#34;任何角色(除了换行符(无论如何大部分时间))&#34;。

  8. 玩得开心。 。