美文网首页
Python3.x 正则基础学习

Python3.x 正则基础学习

作者: Bruce_XHG | 来源:发表于2019-12-25 14:44 被阅读0次

使用Python正则,首先得导入re文件
import re

虽然开发了几年但是并没有怎么研究过正则的使用,学习Python的时候让我觉得正则是如此的强大,然而正则表达式是可以通用的,也就是说虽然我我是在Python中学正则表达式,但是在OC、swift、Android、Java、js等各种语言中都可以使用的一种通用知识点,所以还是掌握的比较好。

正则的使用可以说可以很快速优雅的处理你想处理的字符串问题,但是有些处理系统也提供了方法,如果是系统提供的建议还是使用系统提供的方法。

1、找出字符串中指定的字符

# 找出字符串中的python
a = 'java|oc|c|c++|python|php|html|css|go|javascript|' 
1、我们可以使用in
print('python' in a)  # 返回结果是 True

2、我们可以使用index方法,但是此方法不建议使用。因为如果不存在程序就会crash
print(a.index('python'))  # 返回结果是python在字符串中的其实位置的index

3、我们使用正则进行匹配
print('通过正则在字符串中找到符合条件的子字符串:', re.findall('python', a))  # 返回结果是 ['python']

2、找出字符串中某一类字符

b = 'java1oc2c3c++4python5php6html7css8go9javascript0'  # 找出字符串中的数字
1、找出字符串中的所有数字
print(re.findall('\d', b))   # 结果是:['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']

2、找出字符串中所有的非数字字符
print(re.findall('\D', b))  # 结果是:['j', 'a', 'v', 'a', 'o', 'c', 'c', 'c', '+', '+', 'p', 'y', 't', 'h', 'o', 'n', 'p', 'h', 'p', 'h', 't', 'm', 'l', 'c', 's', 's', 'g', 'o', 'j', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't']

3、使用正则把字符串中的数字替换成 |
print(re.sub(re.compile('\d'), '|', b))  # 结果是:java|oc|c|c++|python|php|html|css|go|javascript|

4、使用正则找到字符串中所有的数字并进行排序
print(sorted(re.findall('\d', b)))   # 结果是:['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

上面排序使用到了sort函数;字符串替换sub函数

3、简单说说match、search、findall函数

1、match:只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;并且match只匹配一次
例如:
print('[^]:', re.match("[^0-9]+", 'wscvf123'))  # [^]: <re.Match object; span=(0, 5), match='wscvf'>
print('\d:', re.match('[0-9]+', 'wscvf123'))  # \d: None 因为字符串开始不是以数字开始所以匹配失败
print('[^0-9]+', re.match('[^0-9]+', 'dhjsw3432jda13rjsr59dj78'))  # [^0-9]+ <re.Match object; span=(0, 5), match='dhjsw'> 只匹配了一次

2、search: 匹配整个字符串,直到找到一个匹配
例如:
print('\d+:', re.search('\d+', 'wscvf123'))  # \d+: <re.Match object; span=(5, 8), match='123'>
print('[0-9]+', re.search('[0-9]+', 'dhjsw3432jda13rjsr59dj78'))  # [0-9]+ <re.Match object; span=(5, 9),match='3432'> 只匹配了一次

3、findall匹配所有符合正则表达式的字符
例如:
print('[0-9]+', re.findall('[0-9]', 'dhjsw3432jda13rjsr59dj78'))  # [0-9]+ ['3', '4', '3', '2', '1', '3', '5', '9', '7', '8']

4、正则表达式常用的元字符(multiline 是一个布尔对象,如果使用了 "m" 标志,则返回true;否则,返回false。"m" 标志意味着一个多行输入字符串被看作多行。例如,使用 "m","^" 和 "$" 将会从只匹配正则字符串的开头或结尾,变为匹配字符串中任一行的开头或结尾。)

元字符 解释
------------------------------------------------------------------------------
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "" 而 "(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。注意:如果[^0-9]则表示非数字
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.或\n)"的模式。
x或y 匹配 x 或 y。例如,'z或food' 能匹配 "z" 或 "food"。'(z或f)ood' 则匹配 "zood" 或 "food"。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
1、\
print("\\n:", re.search('\n', """这是一段换行的匹配
                                这是一段换行的匹配
                                这是一段换行的匹配
                                """))  # \n: <re.Match object; span=(9, 10), match='\n'>

2、^  [^]  {n,m}
re_root = '^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$'
print('[^0-9]+', re.match('[^0-9]+', 'dhjsw3432jda13rjsr59dj78'))  # [^0-9]+ <re.Match object; span=(0, 5), match='dhjsw'> 

3、$  \S
print('\S+$:', re.match('\S+$', 'wscvf123'))  # \S+$: <re.Match object; span=(0, 8), match='wscvf123'>

4、+  \D
print('\D+:', re.match('\D+', 'wscvf123'))  # \D+: <re.Match object; span=(0, 5), match='wscvf'>

5、?
print('?:', re.match('ws(cv)?', 'wscvf123'))  # ?: <re.Match object; span=(0, 4), match='wscv'>

6、|  {n}
res = re.match('(13[0-9]|14[1|5|6|7|9]|15[0-3,5-9]|16[6-8]|17[0-8]|18[0-9]|19[89])\d{8}', phoneNumber)

相关文章

  • Python3.x 正则基础学习

    使用Python正则,首先得导入re文件import re 虽然开发了几年但是并没有怎么研究过正则的使用,学习Py...

  • 18年第18周:300行代码入门Numpy、Pandas

    前言: 学习对象:Numpy、Pandas的基本使用学习工具: Goole搜索相关基础:Python基础(无需正则...

  • 正则基础学习

    正则表达式 \b 特殊代码 又元字符 代表单词的开头或者结尾,也就是单词的分界处 元字符 .* 任意数量的不包含换...

  • 基础正则学习grep

    1.下载模板问题 文件共22行最下面行为空格。我们开始吧 1.搜索指定字符串 2.取反数值 不论大小写取'the'...

  • 正则基础学习(1)

    正则学习 \b是正则中表示分隔符的含义比如精确地查找hi就使用\bhi\b .代表地是非换行符地任意字符 *代表的...

  • 正则笔记

    学习来源:腾讯课堂-Javascript正则表达式基础学习代码:https://github.com/GemmaY...

  • 正则表达式

    作为前端开发,基础的正则是需要学习的,不能完全不会啊!不然大厂面试会死的很惨 官方权威学习地址:正则表达式 - J...

  • Python3.x 基础学习资料整理

    之前整理过很多的有关于 Python 的学习资料,都是有关于Python2.x的资料。我们都知道Python3.x...

  • 手机号正则表达式验证

    基础方法 /** 基础方法 @param regex 正则表达式 @return 正则验证成功返回YES, 否则返...

  • 扩展正则学习

    仅供自己学习参考 扩展正则基础正则的加强版。 物料准备 删除空行和注释行# 特殊符号意义与范例”+ “ 重复一个...

网友评论

      本文标题:Python3.x 正则基础学习

      本文链接:https://www.haomeiwen.com/subject/ebzqoctx.html