【问题标题】:problems using regex expressions re.search and re.compile使用正则表达式 re.search 和 re.compile 的问题
【发布时间】:2014-07-22 03:47:57
【问题描述】:

一位堆栈溢出用户向我展示了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    

但是当正则表达式中只有一个您要查找的文本时会发生什么?

示例

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

结果

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

页面上可能有也可能不超过一个 - 在这种情况下,始终使用 result[0] 将不起作用,因为页面上可能只有一个电子邮件地址实例。

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

email = pattern.search(data)
print email

<_sre.SRE_Match object at 0x0553B090>

【问题讨论】:

    标签: python regex web-scraping syntax-error


    【解决方案1】:

    在我看来,您正处于使用 Python 正则表达式的阶段,您需要阅读一些文档或完整的教程,而不是试图获取不连贯的知识。

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

    引用Jan Goyvaerts,RegexBuddy 的作者和Regular Expressions Cookbook的合著者:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2012-02-18
      • 2015-08-02
      • 2023-03-26
      • 2019-10-05
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多