python小小白哟 发表于 2023-7-4 09:45:23

python中re正则表达式问题

代码如下:

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打印出来的字符串确是一个完整的字符串,结果为什么不一致呢?

陶远航 发表于 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())


希望对你有帮助。

isdkz 发表于 2023-7-4 09:49:52

因为 match 就是返回一个Match对象的,如果想要获取匹配到的字符串就需要用 Match对象的group方法

python小小白哟 发表于 2023-7-4 09:51:41

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

我指的是re.match方法中,match的字符串只截止到Regex,然而group却返回的是整个字符串。为什么会出现这个情况呢?

isdkz 发表于 2023-7-4 10:04:34

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

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

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

不过这也情有可原,因为如果匹配到多长的字符串都在对象那里原样显示出来的话那打印出的对象也太不美观了
页: [1]
查看完整版本: python中re正则表达式问题