Python正则表达式匹配的经典例子以及url转义字符串的一些知识

超级好的正则匹配教程:
https://www.cnblogs.com/chuxiuhong/p/5885073.html
+匹配一个或多个,*匹配0个或多个,[0-9]指定取值范围,a{2-5}指定取匹配a2-5次的,还有一些专门匹配汉字字符的;
个人建议:在你使用”+”,”*”的时候,一定先想好到底是用贪婪型还是懒惰型,尤其是当你用到范围较大的项目上时,因为很有可能它就多匹配字符回来给你!!!
正则表达式特性:需要编译正则匹配默认会贪婪地匹配,可能返回来多了的内容,可以加?避免;
当能匹配成功的情况下,re.search返回的是一个对象k,而不是布尔值,
下面例子中直接用if k判断,k是一个对象,是因为if语句中,k会自动转化成布尔值,为真,所以可以的!!
当然可以用bool(k)将它转换成布尔值;

币种,提取特定条件下的特征;

一个形象的正则匹配的例子:

import re

key = r"javapythonhtmlvhdl"#这是源文本
p1 = r"python"#这是我们写的正则表达式
pattern1 = re.compile(p1)#同样是编译
matcher1 = re.search(pattern1,key)#同样是查询
print matcher1.group(0)

看完这段代码,你是不是觉得:卧槽?这就是正则表达式?直接写上去就行?
确实,正则表达式并不像它表面上那么奇葩,如果不是我们故意改变一些符号的含义时,你看到的就是想要匹配的。
所以,先把大脑清空,先认为正则表达式就是和想要匹配的字符串长得一样。在之后的练习中我们会逐步进化

注意python版本的区别:python2下面汉字需要加u,Python3则不需要;

1)Python正则表达式匹配的经典例子
正则字符串的学习:
In[6]: s='AZ'
In[8]: import re
In[9]: k=re.search(u"[a-zA-Z]", s)
In[10]: k
Out[10]: <_sre.SRE_Match at 0x7f7c34160ac0>  #对象
In[11]: bool(k)
Out[11]: True

代码2:
import re
words = u'study in 山海大学'
regex_str = u".*?([\u4E00-\u9FA5]+大学)"  #在python2中需要加u,否则匹配不上
match_obj = re.match(regex_str, words)
if match_obj:
    print(match_obj.group(1))

([\u4E00-\u9FFF]+)([0-9]+)([^,, \u4E00-\u9FFF]*)
这个是正则表达式,
([\u4E00-\u9FFF]+)指汉字字符,“+”指至少一个
([0-9]+) 指 至少一个数字
([^,, \u4E00-\u9FFF]*) 指非,,汉字的字符

# import sys
# import re
# reload(sys)
#
# text = open('/home/sc/Desktop/temp.txt')
#
# line = text.readline()
#
# #i = 0
#
# while line:
#
#     #i = i+1
#
#     #re.search匹配整个字符串,直到找到一个匹配。
#     n1 = re.search(r'(要(是|能)(.*)就(更|好|再|直观|完美|太)(.*)了)',line)
#     n2 = re.search(r'(如果)(.*)就(更|好|再|直观|完美|太)(.*)了',line)
#
#     #打开将要写入的数据
#     data = open('/home/sc/Desktop/aa.txt','a')
#
#     if n1:
#         #print line
#         data.write(line)      #写入匹配到的数据
#
#         #print i              记录匹配结果所在的行数
#         #print n1.group()     #等于print line
#
#         print(n1.group(3))     #打出第三个括号里的内容
#
#     if n2:
#
#         #print n2.group()
#
#         print(n2.group(2))
#
#     line = text.readline()
#
# text.close()2)url转义字符串的一些知识,
显示空格
编辑
通常情况下,HTML会自动截去多余的空格。不管你加多少空格,都被看做一个空格。比如你在两个字之间加了10个空格,HTML会截去9个空格,只保留一个。为了在网页中增加空格,你可以使用 &nbsp; 表示空格。
url
编辑
web 开发中通过问号(?)方式在浏览器地址栏中传值时。浏览器是通过“&”来区分问号后的参数个数的。 如果出现传值参数中带有“&”时,在接受页面就会出现错误,类似如下请求路径:/next.jsp?param1=hendhs89&furej & param2=sss
参数param1中含有转义字符“&” ,这样会导致被请求页的参数接收错误。
在传值前 通过 java.net.URLEncoder.encode(param1) 编码处理后,可将转义字符转为16进制;
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL中指定的参数间的分隔符%26
8. = URL中指定参数的值 %3D
9. ! URL中指定参数的值 %21
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值