【问题标题】:Python - Regex - from Xpath - TypeError: '_sre.SRE_Match' object is not subscriptablePython - 正则表达式 - 来自 Xpath - TypeError:'_sre.SRE_Match' 对象不可下标
【发布时间】:2018-01-15 19:02:24
【问题描述】:

以下代码下载网页,查找和元素,然后运行正则表达式以解析字符串中的数字。它似乎适用于我的 python 3.7 测试系统,但不适用于我的 python 3.5。我正在下载一个网页,使用 Xpath 查找一个文本块。 xpath 返回类似“International (21)”或“Books (99)”之类的内容,我想提取数字,即 21 或 99。

在 python 3.5 中,我返回 'TypeError: '_sre.SRE_Match' object is not subscriptable。'

我不相信错误是版本的差异,但这是唯一已知的差异。 xpath 似乎正在工作,因为它返回 '<_sre.sre_match object span="(14," match="(21)">' 当我打印 CountObj 时。

我应该为 python 3.5 做一些调整吗,有没有更好的编码方法?

driver = webdriver.Chrome()
driver.get(url); #Download the URL passed from mysql

CatAndCount =  driver.find_element_by_xpath('//h2 [@class="searchResultsTitle"]').text 
 # the above line returns with a name and value like 'International (21)'

CountObj = re.search("\((.*?)\)",CatAndCount)  # look for the number, 21 in example
print (CountObj) # for testing
CountVal=CountObj[1]

【问题讨论】:

    标签: python regex xpath


    【解决方案1】:

    您需要在re.MatchObject 上调用group() 方法,并将捕获的组数作为参数来获取(空白或整个匹配为0)。因此,要获得第一个捕获的组:

    CountObj.group(1)
    

    编辑:

    如果您有多个捕获的组,并且想要全部,则使用groups() 方法将它们作为元组获取,例如:

    CountObj.groups()
    

    或者如果你想要特定的,例如第 1 个和第 4 个捕获的组,使用group() 如下所示获取被询问的元组:

    CountObj.group(1, 4)
    

    【讨论】:

    • 谢谢.. 当我做 CountObj[1] vs CountObj[0] 时,它是为了取回 21 vs (21) 的值。这就是组方法的用途吗?或者这是为了处理正则表达式可能返回多个结果的事实。在我的示例中,它只返回一个,但我意识到正则表达式可能有多个结果
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2021-12-14
    • 2023-03-20
    • 2015-07-31
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多