- 帖子
- 5
- 精华
- 0
- 积分
- 130
- 阅读权限
- 20
- 注册时间
- 2019-10-3
- 最后登录
- 2019-12-30
|
本帖最后由 delapi 于 2019-10-6 04:47 编辑
终于搞懂了,\bs\S*?e\b表示的是在文本中搜索一个回退符+s\S*?e+一个回退符,回退符\x08本身是占位置的,而不是我想的直接删除前面的字母
--------------------------------------------------------------------
我有点不太理解这个,如果说r"\bs\S*?e\b"这个正确可以理解,因为他先保证不转义,然后到正则表达时再转义。
可“\bs\S*?e\b”即便是在正则表达拿到规则前就转义了,可是用这个s\S*?e作为规则也不应该是no match啊(我试了m = re.findall(r's\S*?e', text)是可以搜到结果['site', 'se', 'sue', 'swe', 'se', 'se', 'sse', 'sse', 'se']的 )
我刚刚试了一下print(‘\bs\S*?e\b’)得到的并不是s\S*?e而是s\S*?(其实有点奇怪的是为什么S前面的反斜杠没有消去),我以为我搞懂了因为在正则表达之前转义\b会用python的规则当成回退符而非单词边界,可是按这个道理:
1.我在\b的前面随便输入一个新的字符(比如我试了‘a\bs\S*?ea\b'和‘\bs\S*?ea\b)应该就可以得到结果,但还是no match。
2.我试了m = re.findall(r's\S*?', text),也可以得到结果['s', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's']而非no match
所以我现在确实被搞糊涂了 |
|