首页 > 解决方案 > 为什么python返回以下内容?

问题描述

p = re.compile('x*')
print(p.search('abxd'))

输出:

<re.Match object; span=(0, 0), match=''>
p = re.compile('x+')
print(p.search('abxd'))

输出:

<re.Match object; span=(2, 3), match='x'>

标签: pythonregex

解决方案


您看到的是 Python(更具体地说,是 Regex 模块)返回一个 re.Mach object。这个对象有方法和类,你可以调用它们来得到你想要的结果。

例如,如果您只想将匹配作为字符串,则此代码将打印它:

>>> expression = re.compile('.+')
>>> result = expression.search('abcd')
>>> print(result.group())
'abcd'

您当前的代码(第一个示例)还包含一个与输入字符串不匹配的表达式,这可能是一些混乱的根源。在我提供的示例中,我使用了.+,它将匹配任何字符零到无限次。Regex101.com在帮助创建 Regex 表达式和理解语法方面做得非常出色。

这是RegexMatch对象的文档(您在当前代码中得到的内容),具体来说,这里是该.group()方法的文档。

快速说明:

您不需要调用搜索函数之前编译表达式(但是,这完全是个人喜好,但它更常用;在调用搜索函数之前编译表达式是有正当理由的,但这超出了范围回答这个问题)。以下两个代码块将执行完全相同的操作:

expression = re.compile('.+')
print(expression.search('string'))
print(re.search(r'.+', 'string'))

在第二块中,表达式是搜索函数中的第一个参数,r前面有a,表示它是一个正则表达式。

希望这可以帮助!


推荐阅读