鱼C论坛

 找回密码
 立即注册
查看: 1869|回复: 4

python中re正则表达式问题

[复制链接]
发表于 2023-7-4 09:45:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
import re

content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.match('^Extra.*stings$',content)
print(result)
print(result.group())

其中我设置了^以Extra开头,以stings$结尾,输出应该是Extra stings Hello 1234567 World_This is a Regex Demo Extra stings 一个完整的字符串,为什么结果却不一致呢?
我用group打印出来的字符串确是一个完整的字符串,结果为什么不一致呢?

微信截图_20230704093912.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-4 09:45:36 | 显示全部楼层
问题分析:
根据提供的代码和描述,可以推断出问题出在对re.match()的误解上。

re.match(pattern, string, flags=0) 是从字符串的起始位置开始匹配,只有在匹配成功的情况下才返回匹配对象,否则返回None。

解决方法:
1. 如果要匹配整个字符串,应该使用re.fullmatch()代替re.match()。
2. 如果不想更改代码,将pattern改为'^Extra.*stings.*$'即可。

示例代码:
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.fullmatch('^Extra.*stings$', content)
print(result)
print(result.group())

希望对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 09:49:52 | 显示全部楼层
因为 match 就是返回一个Match对象的,如果想要获取匹配到的字符串就需要用 Match对象的group方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-4 09:51:41 | 显示全部楼层
isdkz 发表于 2023-7-4 09:49
因为 match 就是返回一个Match对象的,如果想要获取匹配到的字符串就需要用 Match对象的group方法

我指的是re.match方法中,match的字符串只截止到Regex,然而group却返回的是整个字符串。为什么会出现这个情况呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 10:04:34 | 显示全部楼层
python小小白哟 发表于 2023-7-4 09:51
我指的是re.match方法中,match的字符串只截止到Regex,然而group却返回的是整个字符串。为什么会出现这 ...

因为你直接打印对象的话,打印出来的东西是由 __str__ 来决定的,而通常对象的 __str__ = __repr__

所以应该是在定义 Match 对象的时候在 __repr__ 中对匹配到的字符串的显示做了长度限制,

不过这也情有可原,因为如果匹配到多长的字符串都在对象那里原样显示出来的话那打印出的对象也太不美观了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表