使用正则表达式re.search和re.compile的问题

时间:2014-06-02 04:54:48

标签: python regex web-scraping syntax-error

堆栈溢出用户已经向我展示了https://pythex.org/,它允许您构建和测试正则表达式。

我已经成功地只能编写表达式,但是当涉及到在python中使用re时实际使用它。模块我很困惑。

我不明白的是何时使用.compile,以及何时进行re.search - >

如果我搜索括号内的文本,例如有多个,我收集我应该使用.group [x]其中x是你想要返回的项目的索引

示例

pattern = re.compile(r'View All \((\d*)\)')
number = pattern.search(data).group(2);

据我了解,如果我有以下内容,则number_connections变量在打印时将为

View All (8) View All (16) View All (12)

结果

Print number
16

我没有得到的结果是:如果您正在寻找的文本不止一个,那么您如何循环它们,以及如何计算它们的数量?

For example: number.count() would return, found 3
for i in number: (this doesn't work because match is a regular expression object???)
    print i    

但是,如果正则表达式中只有一个正在查找的文本,会发生什么?

示例

正则表达式:     pattern = re.compile('[a-zA-Z] \ s [a-zA-Z] / [a-zA-Z] / [a-zA-Z] < / EM>')     email = pattern.search(data).group(1);

结果

data: "email-id":"FisrtName LastName/Australia/ABC"}]</p></body></html>
should return: firstname lastname/Australia/ABC

页面上可能有或不多有这些内容 - 在这种情况下,始终使用结果[0]将无效,因为页面上可能只有一个电子邮件地址实例。

现在我意识到我的语法显然是错误的,但这样做也给了我以下内容,所以我正在寻找有关如何使用https://pythex.org/构建它后如何正确使用正则表达式的指导:

email = pattern.search(data)
print email

<_sre.SRE_Match object at 0x0553B090>

1 个答案:

答案 0 :(得分:3)

听起来我觉得你正处于使用Python正则表达式的阶段,你需要阅读一些文档或完整的教程 - 而不是试图获取断开连接的知识。

无论是否编译正则表达式,都可以访问完全相同的匹配。

引用Jan Goyvaerts,RegexBuddy的作者和正则表达式食谱的共同作者:

  

如果您想多次使用相同的正则表达式,那么   应该将它编译成正则表达式对象。正则表达式   对象更有效,并使您的代码更具可读性。至   创建一个,只需调用re.compile(regex)或re.compile(正则表达式,flags)。   标志是上面针对re.search()描述的匹配选项   和re.match()函数。

     

re.compile()返回的正则表达式对象提供了所有   re模块也直接提供的功能:search(),   match(),findall(),finditer(),sub()和split()。不同的是   他们使用存储在正则表达式对象中的模式,而不是采取   正则表达式作为第一个参数。 re.compile(regex).search(subject)是   相当于re.search(正则表达式,主题)。

对于多个匹配项,您可以使用findallfinditer(同一页面上的详细信息)。