![]() |
英俊的硬盘 · 2023年618哪一款手机性价比高?手机推荐 ...· 5 月前 · |
![]() |
有腹肌的海豚 · 连环“塌房”的背后,“揠苗助长”的偶像产业何 ...· 8 月前 · |
![]() |
酒量大的酸菜鱼 · 单位会员-深圳市审计局· 9 月前 · |
![]() |
潇洒的薯片 · 黄宏生的造车“棋局”|黄宏生|家电_新浪科技 ...· 1 年前 · |
![]() |
无邪的猴子 · 《赎罪》精彩影评_百度百科· 1 年前 · |
'.'
默认匹配除
\n
之外的任意一个字符,若指定
flag DOTALL
,则匹配任意字符,包括换行
'^'
匹配字符开头,若指定
flags MULTILINE
,这种也可以匹配上(
r
"^a"
,
"\nabc\neee"
,
flags
=
re
.
MULTILINE
)
'$'
匹配字符结尾,或
e
.
search
(
"foo$"
,
"bfoo\nsdfsf"
,
flags
=
re
.
MULTILINE
).
group
()也可以
'*'
匹配*号前的字符
0
次或多次,
re
.
findall
(
"ab*"
,
"cabb3abcbbac"
)
结果为[
'abb'
,
'ab'
,
'a'
]
'+'
匹配前一个字符
1
次或多次,
re
.
findall
(
"ab+"
,
"ab+cd+abb+bba"
)
结果[
'ab'
,
'abb'
]
'?'
匹配前一个字符
1
次或
0
次
'{m}'
匹配前一个字符
m
次
'{n,m}'
匹配前一个字符
n
到
m
次,
re
.
findall
(
"ab{1,3}"
,
"abb abc abbcbbb"
)
结果
'abb'
,
'ab'
,
'abb'
]
'|'
匹配|左或|右的字符,
re
.
search
(
"abc|ABC"
,
"ABCBabcCD"
).
group
()
结果
'ABC'
'(...)'
分组匹配,
re
.
search
(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).
group
()
结果
abcabca456c
'\A'
只从字符开头匹配,
re
.
search
(
"\Aabc"
,
"alexabc"
)
是匹配不到的
'\Z'
匹配字符结尾,同
$
'\d'
匹配数字
0
-
9
'\D'
匹配非数字
'\w'
匹配[
A
-
Za
-
z0
-
9
]
'\W'
匹配非[
A
-
Za
-
z0
-
9
]
's'
匹配空白字符、
\t
、
\n
、
\r
,
re
.
search
(
"\s+"
,
"ab\tc1\n3"
).
group
()
结果
'\t'
'(?P<name>...)'
分组匹配
re
.
search
(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).
groupdict
(
"city"
)
结果{
'province'
:
'3714'
,
'city'
:
'81'
,
'birthday'
:
'1993'
}
re
.
I
(
re
.
IGNORECASE
):
忽略大小写(括号内是完整写法,下同)
M
(
MULTILINE
):
多行模式,改变
'^'
和
'$'
的行为
S
(
DOTALL
):
点任意匹配模式,改变
'.'
的行为
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
本文主要介绍Python中常用的正则表达式处理函数。
re
.
match
(
pattern
,
string
,
flags
=
0
)
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回 一个包含那些组所对应值的元组 。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
#!/usr/bin/python
import
re
line
=
"Cats are smarter than dogs"
matchObj
=
re
.
match
(
r
'(.*) are (.*?) .*'
,
line
,
re
.
M
|
re
.
I
)
if
matchObj
:
print
(
"matchObj.group() : "
,
matchObj
.
group
())
print
(
"matchObj.group(1) : "
,
matchObj
.
group
(
1
))
print
(
"matchObj.group(2) : "
,
matchObj
.
group
(
2
))
else
:
print
(
"No match!!"
)
-
#!/usr/bin/python
-
import
re
-
-
line
=
"Cats are smarter than dogs"
-
-
searchObj
=
re
.
search
(
r
'(.*) are (.*?) .*'
,
line
,
re
.
M
|
re
.
I
)
-
-
if
searchObj
:
-
print
(
"searchObj.group() : "
,
searchObj
.
group
())
-
print
(
"searchObj.group(1) : "
,
searchObj
.
group
(
1
))
-
print
(
"searchObj.group(2) : "
,
searchObj
.
group
(
2
))
-
else
:
-
print
(
"No search!!"
)
以上实例执行结果如下:
-
searchObj
.
group
()
:
Cats
are smarter than dogs
-
searchObj
.
group
(
1
)
:
Cats
-
searchObj
.
group
(
2
)
:
smarter
re.match与re.search的区别
-
re.match只匹配字符串的开始
,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
-
而re.search
匹配整个字符串
,直到找到一个匹配。
-
#!/usr/bin/python
-
import
re
-
-
line
=
"Cats are smarter than dogs"
;
-
-
matchObj
=
re
.
match
(
r
'dogs'
,
line
,
re
.
M
|
re
.
I
)
-
if
matchObj
:
-
print
(
"match --> matchObj.group() : "
,
matchObj
.
group
())
-
else
:
-
print
(
"No match!!"
)
-
-
matchObj
=
re
.
search
(
r
'dogs'
,
line
,
re
.
M
|
re
.
I
)
-
if
matchObj
:
-
print
(
"search --> matchObj.group() : "
,
matchObj
.
group
())
-
else
:
-
print
(
"No match!!"
)
-
以上实例运行结果如下:
-
No
match
!!
-
search
-->
matchObj
.
group
()
:
dogs
正则表达式模式
-
模式字符串使用特殊的语法来表示一个正则表达式:
-
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
-
多数字母和数字前加一个反斜杠时会拥有不同的含义。
-
标点符号只有被转义时才匹配自身
,否则它们表示特殊的含义。
-
反斜杠本身需要使用反斜杠转义
。
-
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。
-
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
正则表达式的符号与方法
-
常用符号:点号,星号,问号与括号(小括号)
-
-
.
:匹配任意字符,换行符
\n
除外
-
*
:匹配前一个字符
0
次或无限次
-
?
:匹配前一个字符
0
次或
1
次
-
.*
:贪心算法
-
.*?
:非贪心算法
-
()
:括号内的数据作为结果返回
-
常用方法:
findall
,
search
,
sub
-
-
findall
:匹配所有符合规律的内容,返回包含结果的列表
-
search
:匹配并提取第一个规律的内容,返回一个正则表达式对象(
object
)
-
sub
:替换符合规律的内容,返回替换后的值
-
import
re
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
b
=
re
.
findall
(
'xx.*xx'
,
secret_code
)
-
print
(
b
)
-
import
re
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
b
=
re
.
findall
(
'xx.*?xx'
,
secret_code
)
-
print
(
b
)
-
import
re
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
b
=
re
.
findall
(
'xx(.*?)xx'
,
secret_code
)
-
print
(
b
)
-
[
'I'
,
'love'
,
'you'
]
-
import
re
-
secret_code
=
'''ghkj08hs68xxIxxa14kgj4w314exxlove
-
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
-
#love后有换行符
-
b
=
re
.
findall
(
'xx(.*?)xx'
,
secret_code
)
-
print
(
b
)
-
# 因为.不能匹配换行符。所以会一行为一个搜索项去找。匹配任何字符除了新的一行
-
import
re
-
secret_code
=
'''ghkj08hs68xxIxxa14kgj4w314exxlove
-
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
-
#love后有换行符
-
b
=
re
.
findall
(
'xx(.*?)xx'
,
secret_code
,
re
.
S
)
-
print
(
b
)
-
# re.S让.匹配所有行,包括了换行符(以\n的形式出现)
-
import
re
-
s2
=
'''ghkj08hs68xxIxx123xxlove
-
xxbvk14rgjhxxfj4286ykjhag2'''
-
b
=
re
.
search
(
'xx(.*?)xx(.*?)xx'
,
s2
,
re
.
S
).
group
(
1
)
-
print
(
b
)
-
c
=
re
.
search
(
'xx(.*?)xx(.*?)xx'
,
s2
,
re
.
S
).
group
(
2
)
-
print
(
c
)
-
d
=
re
.
search
(
'xx(.*?)xx(.*?)xx'
,
s2
,
re
.
S
).
group
(
3
)
-
print
(
d
)
-
import
re
-
s2
=
'''ghkj08hs68xxIxx123xxlovexxbvk14rgjhxxfj4286ykjhag2'''
-
f2
=
re
.
findall
(
'xx(.*?)xx123xx(.*?)xx'
,
s2
,
re
.
S
)
-
print
(
f2
)
-
print
(
f2
[
0
][
1
])
-
re
.
sub
(
pattern
,
repl
,
string
,
count
=
0
,
flags
=
0
)
-
-
找到
RE
匹配的所有子串,并将其用一个不同的字符串替换。
-
-
-
第一个参数:
pattern
-
pattern
,表示正则中的模式字符串
-
-
第二个参数:
repl
-
repl
,就是
replacement
,被替换,的字符串的意思。
-
-
第三个参数:
string
-
string
,即表示要被处理,要被替换的那个
string
字符串。
-
-
-
第四个参数:可选参数
count
是模式匹配後替换的最大次数;
count
必须是非负整数。
-
缺省值是
0
表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。
-
-
-
re
.
subn
(
pattern
,
repl
,
string
,
count
=
0
,
flags
=
0
)
-
与
re
.
sub
方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。
-
-
import
re
-
s
=
'123abcssfasdfas123'
-
output
=
re
.
sub
(
'123(.*?)123'
,
'123789123'
,
s
)
-
print
(
output
)
-
# sub将符合条件的()内内容提换
-
import
re
-
inputStr
=
"hello 123 world 456"
-
replacedStr
=
re
.
sub
(
"\d+"
,
"222"
,
inputStr
)
-
print
(
replacedStr
)
-
import
re
-
secret_code
=
'''ghkj08hs68xxIxxa14kgj4w314exxlove
-
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
-
pattern
=
'xx(.*?)xx'
-
new_pattern
=
re
.
compile
(
pattern
,
re
.
S
)
-
b
=
re
.
findall
(
new_pattern
,
secret_code
)
-
print
(
b
)
-
import
re
-
a
=
'dfhkgh43gfhja873y5t2167715'
-
b
=
re
.
findall
(
'(\d+)'
,
a
)
-
print
(
b
)
-
<
html
>
-
<
head
>
-
<
title
>极客学院爬虫测试</
title
>
-
</
head
>
-
<
body
>
-
<
div
class
=
"topic"
><
a href
=
"http://jikexueyuan.com/welcome.html"
>欢迎参加《
Python
定向爬虫入门》</
a
>
-
<
div
class
=
"list"
>
-
<
ul
>
-
<
li
><
a href
=
"http://jikexueyuan.com/1.html"
>这是第一条</
a
></
li
>
-
<
li
><
a href
=
"http://jikexueyuan.com/2.html"
>这是第二条</
a
></
li
>
-
<
li
><
a href
=
"http://jikexueyuan.com/3.html"
>这是第三条</
a
></
li
>
-
</
ul
>
-
</
div
>
-
</
div
>
-
</
body
>
-
</
html
>
-
for
i
in
range
(
2
,
total_page
+
1
):
-
new_link
=
re
.
sub
(
'pageNum=\d+'
,
'pageNum=%d'
%
i
,
old_url
,
re
.
S
)
-
print
new_link
-
import
re
-
a
=
'xzx23'
-
-
# . :匹配任意字符,换行符\n除外
-
# 点.是一个占位符,一个.代表一个符号
-
b
=
re
.
findall
(
'x.'
,
a
)
-
print
(
". :匹配任意字符,换行符\\n除外:"
,
b
)
-
-
# * :匹配前一个字符0次或无限次
-
# 依次匹配字符,有则显示,无则显示''(空)。
-
c
=
re
.
findall
(
'x*'
,
a
)
-
print
(
"* :匹配前一个字符0次或无限次:"
,
c
)
-
-
# 问号?
-
# ? :匹配前一个字符0次或1次
-
# 单独与*一样,前面附加其他的符号将做非贪心限制
-
d
=
re
.
findall
(
'x?'
,
a
)
-
print
(
"? :匹配前一个字符0次或1次:"
,
d
)
-
-
# 贪心.*
-
# 只要满足条件全部显示,贪心算法
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
e
=
re
.
findall
(
'xx.*xx'
,
secret_code
)
-
print
(
"贪心.*:"
,
e
)
-
-
# 非贪心.*?
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
f
=
re
.
findall
(
'xx.*?xx'
,
secret_code
)
-
print
(
"非贪心.*?:"
,
f
)
-
-
# () :括号内的数据作为结果返回
-
# ()包围所需要的内容,括号内的内容作为结果返回,不需要的内容放在括号外面
-
secret_code
=
'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
-
g
=
re
.
findall
(
'xx(.*?)xx'
,
secret_code
)
-
print
(
"非贪心.*?:"
,
g
)
-
-
-
-
# sub将符合条件的()内内容提换
-
# sub:替换符合规律的内容,返回替换后的值
-
s
=
'123abcssfasdfas123'
-
output
=
re
.
sub
(
'123(.*?)123'
,
'123789123'
,
s
)
-
print
(
'sub将符合条件的()内内容提换:'
,
output
)
-
-
-
-
# re.S让.匹配所有行,包括了换行符(以\n的形式出现)
-
-
# search 找到一个后返回,不继续,大大提高效率
-
# findall遍历全部,找到尽可能多的项
-
s2
=
'''ghkj08hs68xxIxx123xxlove
-
xxbvk14rgjhxxfj4286ykjhag2'''
-
b
=
re
.
search
(
'xx(.*?)xx(.*?)xx'
,
s2
,
re
.
S
)
-
print
(
'search 找到一个后返回,不继续,大大提高效率:'
,
b
)
-
# 输出
-
# < _sre.SRE_Match
-
# object;
-
# span = (10, 20), match = 'xxIxx123xx' >
-
-
# group是按括号顺序匹配
-
b
=
re
.
search
(
'xx(.*?)xx(.*?)xx'
,
s2
,
re
.
S
).
group
(
1
)
-
print
(
'search 找到一个后返回,不继续,大大提高效率:'
,
b
)
-
# .group(3)报错
-
# Traceback (most recent call last):
-
# File "D:/WorkSpace/python/PycharmProjects/爬虫/代码/Python-master/ReDemo.py", line 61, in <module>
-
# b = re.search('xx(.*?)xx(.*?)xx', s2, re.S).group(3)
-
# IndexError: no such group
-
-
# 每一个匹配项为第一级列表,括号为二级列表
-
s2
=
'''ghkj08hs68xxIxx123xxlovexxbvk14rgjhxxfj4286ykjhag2'''
-
f2
=
re
.
findall
(
'xx(.*?)xx123xx(.*?)xx'
,
s2
,
re
.
S
)
-
print
(
'每一个匹配项为第一级列表,括号为二级列表:'
,
f2
[
0
][
1
])
总结--常用正则表达式符号'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)'$' 匹配字符结尾,或e.search("foo$","bfoo\n
垃圾邮件分类(trec06c数据集)数据处理-1
目标:我要提取 发件人(From)、收件人(To)、邮件主题(Subject)、邮件正文(zhengwen) 作为邮件特征,然后输入到线性分类模型中进行训练
首先是这四个特征提取的部分
获取 标签--路径 对照表
把这一部分的全部的代码放这儿:
~~~~~~~~~~~待更新~~~~~~~~~~~~~~~~~~~~~~~~~~~
re.compile(r'<[^>]+>',re.S),
re.compile(r'\&[a-zA-Z]+;',re.S),
re.compile(r'\n|\t',re.S),
re.compile(r'\[|\]|\(|\)',re.S),
# r...
正则表达式
是一个特殊的字符序列,检查一个字符串是否与某种模式匹配。
Python
自1.5版本起,增加re模块,提供Perl风格的
正则表达式
模式。re模块使
Python
语言拥有全部的
正则表达式
功能。
compile函数根据一个模式字符串和可选的标志参数生成一个
正则表达式
对象。该对象拥有一系列方法用于
正则表达式
匹配和替换。
re模块也提供与这些方法功能完全一致的函数,这些函数使用一个模式字符串做
什么是正则?
正则就是用一些具有特殊含义的符号组合到一起(
正则表达式
)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。内嵌在
Python
中,通过re模块实现。
正则表达式
模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行。
常用
正则表达式
符号
'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
text = 'Jame 12 years old'
pattern = r'[A-Z]\w+\s\d{1,2}' # 正则,匹配出名字和年龄
result = re.sub(pattern,'hello',text) # 将匹配出的内容替换为hello
print(text) #打印原来的文本
print(resul...
泰坦尼克号生存预测是kaggle上面对于初级机器学习者比较适合的用来练习的比赛,本人现在想学习一些特征工程之类相关的只是,所以就是看了一下kaggle上面的大佬展示出来的notebook,有些理解与你们共享,互相学习
数据集说明
首先我们在学习之前要来看一下就是这个我们要学习的数据集,对于这个数据,然后来看作者是要进行怎样的操作,他是怎么操作
,学习一下思路