‘壹’ python的正则表达式
1,正则表达式的一些内容
正则表达式主要是用来匹配文本中需要查找的内容,例如在一片文章中找出电话号码,就中国的来说11位纯数字(不说座机),则使用"d{11}" 意味匹配数字11次,就能准确的查找出文本中的电话号码. 还有就是在编写网络爬虫的时候需要提取很多超链接再次进行爬取,使用正则表达式就很方便.直接匹配http开头就行,当然也可以使用beautifulsoup的select方法.
看下面的程序看看正则表达提取文本中的邮箱:
w 匹配字母,数字,下划线
+ 匹配1次或者多次
re是正则表达式的工具包,工具包出错的话在anaconda的命令行输入"pip install re"安装,其他的工具包也是如此.
re.compile()中的r示意不是转义字符,也就是保持后面字符串原样,findall返回一个列表.下面还有一个版本的程序略有不同.
compile的另一个参数re.IGONORECASE(忽略大小写),还可以是re.DORALL,多行模式,具体功能也是模糊不清,不过在使用通配符 . 匹配的时候加上re.DOTALL参数能够匹配换行.如果希望忽略大小写和多行模式都开启可以使用re.compile(r'....',re.IGNORECASE|re.DOTALL) .
表达式使用( ),对匹配到的内容分为3组 也就是(w+)出现字母,数字,下划线一次或多次,这个分组就是下面使用match对象的grou()方法的时候的参数.不给参数和参数0都是得到整个匹配到的内容, 参数1得到第一个括号匹配到的内容,以此类推参数2和3,如果没有括号分组的话使用参数会出现错误.
search( )查找和正则式匹配的内容,只匹一次后面的那个找不到.返回一个match对象
w 匹配字母,数字,下划线
W 匹配字母,数字.下划线之外的所有字符
d 匹配数字
D 匹配非数字
s 匹配空格,制表符,换行符
S匹配除空格制表符,换行符之外的其他字符
[ .... ]定义自己的匹配,如[aeiouAEIOU ]匹配所有的元音字母,注意不是匹配单词.
{最少次数,最多次数},例如{3,9} 匹配3-9次,{ ,10}匹配0-10次. 默认为匹配最多次数(贪心匹配),非贪心模式在后面加上问号
? 可选 0次或者1次吧
+匹配1次或多次
*匹配0次或者多次
^ 判断开头 ^d 如果待匹配串是数字开头则返回第一个数字
$判断结尾 d$ 如果待匹配串是数字结尾则返回最后一个数字
. 通配符,匹配除换行之外的所有字符
d{11} 匹配数字11次
. * 匹配所有字符除 换行
[a-zA-Z0-9._%+-] 小写和大写字母、数字、句点、下划线、百分号、加号或短横
[a-zA-Z]{2,4} 匹配字母 2 - 4次
‘贰’ python中的re模块是自带的吗
使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。
python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
‘叁’ python 的 re模块中如何使用变量代替要匹配的字符串
这么试试:
XH=raw_input("请输入你的手机型号:")
XH_re=re.compile(XH+'.*?¥(d{1,4})</em>',re.DOTALL)
‘肆’ python3怎么导入re模块
Python除了 str 对象自带的一些方法外,re文字处理能力也很强大。
正则表达式元字符说明
[python正则表达式]
导入和查看正则表达式模块
import re
查看正则表达式模块方法
dir(re)
[‘DEBUG’, ‘DOTALL’, ‘I’, ‘IGNORECASE’, ‘L’, ‘LOCALE’, ‘M’, ‘MULTILINE’, ‘S’, ‘Scanner’, ‘T’,’TEMPLATE’, ‘U’, ‘UNICODE’, ‘VERBOSE’, ‘X’, ‘_MAXCACHE’, ‘all‘, ‘builtins‘, ‘doc‘,’file‘, ‘name‘, ‘package‘, ‘version‘, ‘_alphanum’, ‘_cache’, ‘_cache_repl’,’_compile’, ‘_compile_repl’, ‘_expand’, ‘_pattern_type’, ‘_pickle’, ‘_subx’, ‘compile’,’_reg’, ‘error’, ‘escape’, ‘findall’, ‘finditer’, ‘match’, ‘purge’, ‘search’, ‘split’,’sre_compile’, ‘sre_parse’, ‘sub’, ‘subn’, ‘sys’, ‘template’]
提示:
1. 当我们不会用模块方法的时候用help
2. py2中pattern中的字符串要和string的编码一致,不然会找不到,这个经常出现。
‘伍’ 正则表达式如何满足多行和跨行匹配
正则:
dog.+cat
.+:任意字符,1或多个
或
dog.*cat
.*:任意字符:0或多个
即dog和cat之间允许没有任何字符,此写法都匹配
且加上多行的参数是:
Python:
re.S = re.DOTALL
完整代码:
(网络知道的编辑器中竟然不能输入代码,鄙视👎之)
"""
Function;
正则表达式如何满足多行和跨行匹配?_网络知道
https://..com/question/989230535019059459.html
Author: Crifan Li
Update: 20200208
"""
import re
yourMultipleLineStr = """
first line dog
second line cat
third line no animal
"""
foundMatched = re.search("dog.+cat", yourMultipleLineStr, re.S)
print("foundMatched=%s" % foundMatched)
if foundMatched:
matchedStr = foundMatched.group(0)
print("matchedStr=%s" % matchedStr)
# foundMatched=<re.Match object; span=(12, 31), match='dog second line cat'>
# matchedStr=dog
# second line cat
具体语法详见:
re --- 正则表达式操作 — Python 3.8.1 文档
re.S
re.DOTALL
让'.'特殊字符匹配任何字符,包括换行符;如果没有这个标记,'.'就匹配除了换行符的其他任意字符。对应内联标记(?s)。
-》就可以让上面的 点. 可以匹配到 换行符 -》 就可以去跨行去匹配了
在线测试效果截图:
RegExr: Learn, Build, & Test RegEx
更多内容,详见我的教程:
应用广泛的超强搜索:正则表达式
‘陆’ python正则表达式是什么
python正则表达式是:
'hing'
'wing'
'123456'
'dddddd'
'regex.py'
'.*.py'
正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串, 描述了模式的重复或者表述多个字符。正则表达式能按照某种模式匹配一系列有相似特征的字符串。换句话说, 它们能够匹配多个字符串。
孤立的一个正则表达式并不能起到匹配字符串的作用,要让其能够匹配目标字符,需要创建一个正则表达式对象。通常向compile()函数传入一个原始字符形式的正则表达式,即 r'.....'。
要让正则表达式不区分大小写,可以向re.compile()传入re.IGNORECASE或re.I,作为第二个参数。通过传入re.DOTALL作为re.compile()的第二个参数,可以让句点字符匹配所有字符,包括换行字符。