findall(pattern, string, flags=0)
Return a list of all non-overlapping matches in the string.
If one or more groups are present in the pattern, return a
list of groups; this will be a list of tuples if the pattern
has more than one group.
Empty matches are included in the result.
找所有的数字。
#!/usr/bin/env python
import re
result = re.findall("(\d+)", "2015-03-20")
if result:
print "OK",
print result
else:
print "FAIL"
运行结果:
OK ['2015', '03', '20']
示例-查找年月日
#!/usr/bin/env python
import re
def debug_matches(result):
count = len(result)
if count == 0:
print "No match item."
return
for item in result:
year, month, day = item
print "year:", year, ", month:", month, ", day:", day
result = re.findall("(\d+)-(\d+)-(\d+)", "First 2015-03-20, Second 2016-04-21, ...")
if result:
print "OK",
print result
debug_matches(result)
else:
print "FAIL"
运行结果:
OK [('2015', '03', '20'), ('2016', '04', '21')]
year: 2015 , month: 03 , day: 20
year: 2016 , month: 04 , day: 21
示例三-git log分析
git log中查找文件修改记录。
#!/usr/bin/env python
import re
def debug_matches(result):
count = len(result)
if count == 0:
print "No match item."
return
for item in result:
first_filename, second_filename, start_line, line_number = item
print "first file:", first_filename,
print ", second file:", second_filename,
print ", start line:", start_line,
print ", line number:", line_number
git_log = '''
index 98d2cfb..50d2a32 100644
--- a/arch/arm/boot/dts/qcom/filename1.dtsi
--- b/arch/arm/boot/dts/qcom/filename1.dtsi
@@ -419,6 +419,12 @@
qcom,warm-bat-decidegc = <450>;
qcom,cool-bat-decidegc = <100>;
qcom,warm-bat-decidegc = <0>;
+ xyz,batt-cold-percentage = <80>;
+ xyz,batt-hot-percentage = <25>;
diff --git a/drivers/hwmon/filename2.c b/drivers/hwmon/filename2.c
index fba252e..9179239 100644
--- a/drivers/hwmon/filename2.c
--- b/drivers/hwmon/filename2.c
@@ -419,6 +429,22 @@
result = re.findall("--- a([^\n]+)\n--- b([^\n]+)\n@@ -[\d,]+\ \+(\d+),(\d+)\ ", git_log)
if result is not None: # or if result:
print "OK",
print result
debug_matches(result)
else:
print "FAIL"
运行结果:
OK [(‘/arch/arm/boot/dts/qcom/filename1.dtsi’, ‘/arch/arm/boot/dts/qcom/filename1.dtsi’, ‘419’, ‘12’), (‘/drivers/hwmon/filename2.c’, ‘/drivers/hwmon/filename2.c’, ‘429’, ‘22’)]
first file: /arch/arm/boot/dts/qcom/filename1.dtsi , second file: /arch/arm/boot/dts/qcom/filename1.dtsi , start line: 419 , line number: 12
first file: /drivers/hwmon/filename2.c , second file: /drivers/hwmon/filename2.c , start line: 429 , line number: 22
对于Python来说,学习正则就要学习模块re的使用方法。本文将展示一些大家都应该掌握的高级技巧。
编译正则对象
re.compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。用法上略有区别,举个例子, 匹配一个字符串可用如下方式:
如果使用compile,将变成:
为什么要这么用呢?其实就是为了提高正则匹配的速度,重复利用正则表达式对象。我们对比一下2种方式的效率:
可以看到第二种方式要快很多。在实际的工作中你会发现越多的使用编译好的正则表达式对象,效果就越好。
分组(group)
你可能已经见过对匹配的内容进行分组的用
@author: fighter
Python正则表达式知识点整理。
概述:在处理字符串时,经常会遇到查找符合某些复杂规则字符串的需求,正则表达式就是用于描述这些规则的工具。
首先,我们先掌握一下python中正则匹配需要用到的一些特殊字符。
1、行定位符:就是描述字符串的边界。"^“定义了字符串的开始位置,”$“定义了字符串的结束位置。
example: ^mo ,表示以 “mo” 为开头的...
什么是正则表达式(⊙_⊙)
目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
简单说,正则表达式是
python中必备的工具,主要是用来查找和匹配字符串的。
正则表达式尤其在python爬虫上用的多。
python中正则表达式中的匹配次数问题网上有很多解释,最多的就是*匹配0或者无数次,+匹配1次或无数次,?匹配0次或者1次。可是虽然这个文字描述很简单,但是真正用起来的时候大家有没有发觉还是需要谨慎使用才能发挥出这个匹配次数的真正功能,下面举几个简单例子参考:
首先是一个很简单的匹配:
大家觉得这个输出结果是多少,其实这个结果大家应该都能猜出来:
结果是0bcd,但是我们把匹配次数加进去看看会有什么效果:
匹配符为+的时候,输出的结果和没有加是一样的,因为+的匹配规则是1次或者多次..
该自定义函数可使用多个正则表达式对目标单元格进行多次匹配尝试,如匹配成功,将停止尝试匹配其他正则表达式,并且使用该正则表达式相对应的替换表达式进行替换,返回替换结果。
您可以直接下载包含该函数代码的XLSM文件,打开并启用宏之后,就可以直接使用该函数:http://url.cn/5WVPvgT
使用方法为:
Text参数:需要进行处理的原始文字或单元格。
MatchPatternRange...
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的。下面,我来介绍一下python中的正则表达式是怎么使用的。
首先,python中的...
1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。
2. 字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符
3. 左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]..
编码问题:使用cchardet模块获取编码格式,并将赋予该格式实参,成为类的一个属性
有一些奇怪的编码如“……”:第二次使用正则匹配将这些编码按照规律找不来,使用sub方法替换
# 获取内涵吧多页 段子内容
from typing import Type
import requests
import re
from user_agent import headers
import cchardet
# 完善的一些问题:
# 1 编码问题:使用cchardet模块获取编码格式,并将赋予