Python regex group() 追加 'None

0 投票
2 回答
984 浏览
提问于 2025-04-17 06:54

我有一个简单的正则表达式,用来解析这个字符串:

rawresp0 = """<response>
<comment>Привет.</comment>
</response>"""

我想得到:

Привет.

但是下面的代码却出乎意料地返回了:

Привет.
None

哪里出错了呢

def pars_resp(text):
    reg = re.compile(ur'(?<=<comment>).+(?=</comment>)', re.U)
    print reg.search(unicode(text, "UTF-8")).group(0)

print pars_resp(rawresp0)

2 个回答

1

你有两个打印输出。第一个打印的是你搜索的结果,第二个打印的是pars_resp的返回值,因为你没有返回任何东西,所以它的值是None

你可以把它改成下面的任意一种:

def pars_resp(text):
    reg = re.compile(ur'(?<=<comment>).+(?=</comment>)', re.U)
    print reg.search(unicode(text, "UTF-8")).group(0)

pars_resp(rawresp0)

或者:

def pars_resp(text):
    reg = re.compile(ur'(?<=<comment>).+(?=</comment>)', re.U)
    return reg.search(unicode(text, "UTF-8")).group(0)

print pars_resp(rawresp0)

这样就能打印出你想要的内容了。

1

没什么问题。嗯,除了这个

print pars_resp(rawresp0)

这个函数 pars_resp 返回的是 None。把那个打印语句去掉,最后一行应该是:

pars_resp(rawresp0)

这样就可以正常工作了。

补充说明

另外,你也可以让这个函数返回你想打印的字符串:

def pars_resp(text):
    reg = re.compile(ur'(?<=<comment>).+(?=</comment>)', re.U)
    return reg.search(unicode(text, "UTF-8")).group(0)

print pars_resp(rawresp0)

这样做通常更有用,因为你可以对提取出来的字符串做其他事情,而不仅仅是打印它。

撰写回答