首页 > 其他分享 >NEW learning : Regular Expression

NEW learning : Regular Expression

时间:2023-08-14 13:33:04浏览次数:36  
标签:匹配 pattern group re Regular result words NEW Expression

STEP 1 : The primary formula in the RE code base :

    

result =re.match(pattern, str)
#pattern 为要校验的规则
#str 为要进行校验的字符串
>>> import re
>>> print(re.match('www', 'www.runoob.com').span()) #在起始位置匹配
(0, 3)
>>> print(re.match('com', 'www.runoob.com')) #不在起始位置匹配
None
#如果result不为None,则group方法则对result进行数据提取

字符 功能
. 匹配任意1个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,也就是0-9
\D 匹配非数字,也就是匹配不是数字的字符
\s 匹配空白符,也就是 空格\tab
\S 匹配非空白符,\s取反
\w 匹配单词字符, a-z, A-Z, 0-9, _
\W 匹配非单词字符, \w取反

#首先清楚手机号的规则
#1.都是数字 2.长度为11 3.第一位是1 4.第二位是35678中的一位
>>> import re
>>> pattern ="1[35678]\d{9}"
>>> phoneStr ="18230092223"
>>> result =re.match(pattern,phoneStr)
>>> result.group()
'18230092223'

字符 功能
^ 匹配字符串开头 该字符串如^/d/d/d 必须以数字开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词边界

#定义规则匹配str="ho ve r"
#1. 以字母开始 ^\w
#2. 中间有空字符 \s
#3. \b的两种解释是:
#'\b', 如果前面不加r, 那么解释器认为是转义字符“退格键backspace”;
#r'\b', 如果前面加r, 那么解释器不会进行转义,\b 解释为正则表达式模式中的字符串边界。
#4. ve两边分别限定匹配单词边界
>>> import re
>>> str ="dasdho ve rgsdf"
>>> pattern =r"^\w+\s\bve\b\sr"
>>> result =re.match(pattern, str)
>>> result.group()
'dasdho ve r'

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

#匹配出0-100之间的数字
#首先:正则是从左往又开始匹配
#经过分析: 可以将0-100分为三部分
#1. 0 "0$"
#2. 100 "100$"
#3. 1-99 "[1-9]\d{0,1}$"
#所以整合如下
>>> import re
>>> pattern =r"0$|100$|[1-9]\d{0,1}$"
>>> result = re.match(pattern,"27")
>>> result.group()
'27'
>>> result =re.match(pattern,"212")
>>> result.group()
Traceback (most recent call last):
File "<stdin>", line 1, in<module>
AttributeError: 'NoneType'object has no attribute 'group'
#将0考虑到1-99上,上述pattern还可以简写为:pattern=r"100$|[1-9]?\d{0,1}$"

#(?<=abc)def ,并不是从 a 开始搜索,而是从 d 往回看的。你可能更加愿意使用 search() 函数,而不是 match() 函数:
>>> import re
>>> m =re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
#搜索一个跟随在连字符后的单词
>>> m =re.search(r'(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'

>>> re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split(r'(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']

标签:匹配,pattern,group,re,Regular,result,words,NEW,Expression
From: https://www.cnblogs.com/Twin-wang/p/17628390.html

相关文章

  • C++使用new来初始化指向类的指针
    C++使用new来初始化类的指针1.ClassName*p=newClassName;调用默认构造函数。如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如classNoConstructor//没写构造函数的类{public:~NoConstructor(){}voidprintVal(){......
  • SAP CDS view 里的 Aggregation Expression
    SAPABAPCDS(CoreDataServices)视图是SAP系统中的一种建模工具,用于定义数据模型和数据库视图。CDS视图允许开发者创建高级数据模型,可以从多个数据库表中提取数据,并在SAP应用程序中使用。在CDS视图中,"AggregationExpressions"(聚合表达式)是一项强大的功能,它允许开发者对从底层数据......
  • Json 基于类 Newtonsoft.Json.Linq.JToken 的应用简介【C# 基础】
    〇、前言在日常开发中,对于Json的使用还是比较频繁的,特别是Json对象和字符串或者实体对象之间的转换。虽然几乎天天用,但是总是感觉没那么明了,今天结合微软的Newtonsoft.Json.Linq类,试着详解一下,把相关的内容列一下。一、Newtonsoft.Json.Linq的层级结构简单画个图,肯定比......
  • Selenium Web 自动化 - Selenium(Java)环境搭建 (new)
    SeleniumWeb自动化-Selenium(Java)环境搭建(new)2023-08-110背景开发工具idea代码管理mavenjdk1.8webdriverchrome1chromedriver&chromechromedriver和chrome要对应上:chomedriver下载地址:淘宝镜像 这里用的是 chromedriver88-0-4324-96.zipchrome下载地址:......
  • 《JSON篇》使用Newtonsoft.Json创建JSON对象
    使用Newtonsoft.Json创建JSON对象参考链接:https://blog.csdn.net/chentiebo/article/details/130383788一、创建JSON对象JObjectstaff=newJObject();staff.Add(newJProperty("Name","Jack"));staff.Add(newJProperty("Age",33));staff.Add(newJ......
  • SyntaxError: Error parsing JavaScript expression: Unexpected token, expected ","
    项目环境C:\Users\19139>node-vv18.16.0C:\Users\19139>pnpm-v8.2.0vue3+vite4打包报错"vue":"3.3.4","vite":"4.0.4","rollup":"^3.27.2",报错D:\work\demo>npmrunbuild>base-m......
  • Paper Reading: Multitree Genetic Programming With New Operators for Transfer Lea
    目录研究动机文章贡献本文方法从源域中提取知识基于MTGP的迁移学习转换域的特征、实例权值数据插值MTGP适应度函数遗传算子实验结果数据集实验设置同构情况下的SR异构情况下的SR存在缺失值的真实数据集的SR训练时间学习到的转换表达式遗传算子比较消融实验优点和创新点Pape......
  • Hugging News #0807: ChatUI 官方 Docker 模板发布、 Hub 和开源生态介绍视频来啦!
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「HuggingNews」。本期HuggingNews有哪些有趣的消息,快来看看吧!......
  • new Thread().start(); - 多线程练习
     用Java创建一个线程是这样的:Threadthread=newThread();要启动Java线程,您将调用其start()方法,如下所示:   thread.start();此示例未指定要执行的线程的任何代码。线程启动后会立即再次停止。所以要往线程里写入代码。Threadthread=newThread(){@Override......
  • SQL中CONVERT函数格式:CONVERT(data_type,expression[,style])
    sqlserverconvert()函数的使用方法_convertsqlserver_qq_37528515的博客-CSDN博客SQL中CONVERT函数格式:CONVERT(data_type,expression[,style])说明:data_type:目标系统所提供的数据类型,如果转换时没有指定数据类型的长度,则SQLServer自动提供长度为30。expression:是任......