设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第56课】 正则表达式(2)

[复制链接]

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

41#
发表于 2016-2-12 11:42:47 |只看该作者
crossin先生 发表于 2016-2-4 22:05
我前面说的可能有点不对。如果一段话中有\bhi这个文字,你想匹配出来,规则需要写成
r"\\bhi"
以防止\b作 ...

嗯嗯,我明白了,\b在pyhon中本身有特殊含义,和在正则表达式中意义又不一样,所以需要做两层区分~~
回复

使用道具 举报

1

主题

1

好友

152

积分

注册会员

Rank: 2

42#
发表于 2016-2-29 13:59:38 |只看该作者
import re
text='site sea sue sweet see case sse ssee loses'
m=re.findall(r'\bs\S*?e\b',text)
if m:
    print(m)
else:
    print('not match')
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

43#
发表于 2016-6-11 10:14:45 |只看该作者
import re
text = "site sea sue sweet see case sse ssee loses"
i = re.findall(r"s.*?e", text)
if i:
    print i
else:
    print 'not match'
   
回复

使用道具 举报

0

主题

1

好友

36

积分

新手上路

Rank: 1

44#
发表于 2017-1-31 10:20:16 |只看该作者
  1. import re
  2. text = r"a\bc"
  3. m = re.findall(r"\\b",text)
  4. if m:
  5.     print m
  6. else:
  7.     print 'not match'
复制代码
C老师你好,
为什么这样输出的结果是["\\b"]而不是["\b"]?不是应该匹配出"\b"这个字符的吗?
================== RESTART: C:\Python27\新建文件夹\test0.py ==================
['\\b']
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

45#
发表于 2017-1-31 10:54:08 |只看该作者
红白姬 发表于 2017-1-31 10:20
C老师你好,
为什么这样输出的结果是["\\b"]而不是["\b"]?不是应该匹配出"\b"这个字符的吗?
============ ...

正则的规则:
\b 表示匹配单词边界
\\ 表示匹配字符 \
\\b 表示匹配字符 \b

所以最后匹配出的结果是 \b,因为字符串转义,在字符串中的显示是 \\b(list中保持原始的字符状态)
如果你 print m[0],就看到输出是 \b
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

36

积分

新手上路

Rank: 1

46#
发表于 2017-1-31 11:11:29 |只看该作者
crossin先生 发表于 2017-1-31 10:54
正则的规则:
\b 表示匹配单词边界
\\ 表示匹配字符 \

懂了,谢谢老师
请问老师,我直接print "\b"
打印出的这个是什么字符啊?

QQ图片20170131111021.png (905 Bytes, 下载次数: 611)

QQ图片20170131111021.png

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

47#
发表于 2017-2-1 11:17:24 |只看该作者
红白姬 发表于 2017-1-31 11:11
懂了,谢谢老师
请问老师,我直接print "\b"
打印出的这个是什么字符啊?

回退键
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

48#
发表于 2017-2-4 22:30:41 |只看该作者
  1. #-*- coding:utf-8 -*-
  2. import re
  3. text = "site sea sue sweet see case sse ssee loses"
  4. m = re.findall(r"\bs\S*e\b", text)
  5. if m:
  6.     print(m)
  7. else:
  8.     print('not match')
复制代码
回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

49#
发表于 2017-3-1 22:23:47 |只看该作者
试着写了一下,r"\bs\S.?e\b"这个可以。不知道还有没有更简短的 表达式
回复

使用道具 举报

1

主题

0

好友

80

积分

注册会员

Rank: 2

50#
发表于 2017-8-25 10:57:30 |只看该作者
  1. import re

  2. text = "site sea sue sweet see case sse ssee loses"


  3. m = re.findall(r"\bs\S*?e\b",text)  #不包括空白字符

  4. if m:

  5.     print m

  6. else:

  7.     print 'not match'
复制代码
为什么要加r不转义?r是不转义字符串中的任何字符,保持它的原样.感觉不太对劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-21 23:02 , Processed in 0.016906 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部