python - 为什么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'>
解决方案
您看到的是 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,表示它是一个正则表达式。
希望这可以帮助!
推荐阅读
- node.js - 如果一条消息被删除,则发送另一个消息 Discord.js
- java - Android App apk 大小与安装大小以及如何减小它们?
- r - R Shiny Dashboard 中的反应事件 --> addImageQuery 不响应事件
- c++ - 需要反转音频步长公式
- amazon-web-services - SQS 中的批处理作业完成后如何获得通知
- redis - 如何禁用创建到('redis',6379)打印的tcp连接?
- java - Android Stuido:PC 关闭后库的内存不足(Java 堆空间)错误
- python - 比较 pandas 和 python 中的整数和浮点数是不一致的。为什么?
- javascript - 将属性附加到每个 JSON 对象
- swift - 如何在 SwiftUI 中滚动之前使内联导航栏透明