当不总是有多个匹配时,如何使用python正则表达式?

时间:2014-06-09 08:17:49

标签: python regex

我想在括号之间找到一些文字,例如,我想从“查看全部(70)网络”中提取70

我已经被堆栈溢出用户看到使用pyrex网站来练习buildig正则表达式,并且在他们的指导下我已经能够成功地这样做了。

使用RegEx的GROUP功能时出现问题。

我相信 GROUP 用于获取字符串的第一次或第二次出现,并且在大多数情况下有多个

它可能会说“查看全部(6)”和“查看全部(70)所以.group [1]会返回70.但是如果只有一个实例我仍然需要它来告诉它价值?

我得到的错误是:

NoneType: object has no attribute group

我不确定如何解决这个问题?我可以停止使用正则表达式,但它们可以节省编写各种其他文本操作逻辑的时间。

1 个答案:

答案 0 :(得分:0)

group()基于您定义的识别捕获组。例如:

import re

searchText = "(ONE) TWO THREE"
result = re.search("(ONE)", searchText).group(1)
print("match:", result)

输出:('match:', 'ONE') //捕获组=组(1)

searchText = "ONE TWO THREE"
result = re.search("(ONE)\s(TWO)\s(THREE)", searchText).group(3)
print("match:", result)

输出:('match:', 'THREE') //捕获组=组(3)

请注意,在上一个示例中,我设置了三个捕获组(在括号中定义),我选择显示组(3)的输出。

searchText = "FOUR TWO THREE"
result = re.search("(ONE)\s(TWO)\s(THREE)", searchText)

if result is not None:
    match = filter(None, result.group(3))
else:
    match = "None"

print("match:", match)

要处理异常AttributeError: 'NoneType' object has no attribute 'group',您可以使用if语句返回找不到匹配的更好看的响应。或者没有找到没有输出的用途:

searchText = "ONE TWO THREE"
result = re.search("(ONE)\s(TWO)\s(THREE)", searchText)
print("match:", result)
if result is not None:
    print ("match:", result).group(3)