首页 > 其他分享 >正则表达式具体用法大全

正则表达式具体用法大全

时间:2024-03-21 14:29:05浏览次数:20  
标签:group 正则表达式 text 用法 re result print match 大全

 

# 正则表达式:

## 单字符匹配:
```python
# 匹配某个字符串:
# text = "abc"
# ret = re.match('b',text)
# print(ret.group())


# 点(.):匹配任意的字符(除了'\n'):
# text = "\nabc"
# ret = re.match('.',text)
# print(ret.group())


# \d:匹配任意的数字:
# text = "aab"
# ret = re.match('\d',text)
# print(ret.group())


# \D:匹配任意的非数字:
# text = "cab"
# ret = re.match('\D',text)
# print(ret.group())


# \s:匹配的是空白字符(包括:\n,\t,\r和空格):
# text = " ab"
# ret = re.match('\s',text)
# print("="*30)
# print(ret.group())
# print("="*30)


# \S:非空白字符:
# text = "\nab"
# ret = re.match('\S',text)
# print("="*30)
# print(ret.group())
# print("="*30)


# \w:匹配的是a-z和A-Z以及数字和下划线:
# text = "+bc"
# ret = re.match('\w',text)
# print("="*30)
# print(ret.group())
# print("="*30)


# \W:匹配的是和\w相反的:
# text = "1bc"
# ret = re.match('\W',text)
# print("="*30)
# print(ret.group())
# print("="*30)


# []组合的方式,只要满足中括号中的某一项都算匹配成功:
# text = "bc"
# ret = re.match('[1b]',text)
# print("="*30)
# print(ret.group())
# print("="*30)

# 使用组合的方式[0-9]\d:
# text = "abc"
# ret = re.match('[^0-9]',text)
# print("="*30)
# print(ret.group())
# print("="*30)

# 使用组合的方式实现\w:
text = "+bc"
ret = re.match('[^a-zA-Z0-9_]',text)
print("="*30)
print(ret.group())
print("="*30)
```


## 多字符匹配:
```python
# *:匹配0个或者多个字符:
# text = "+abc"
# result = re.match('\D*',text)
# print(result.group())


# +:匹配1个或者多个字符:
# text = "1abc"
# result = re.match('\w+',text)
# print(result.group())


# ?:匹配前一个字符0个或者1个:
# text = "+abc"
# result = re.match('\w?',text)
# print(result.group())


# {m}:匹配m个字符:
# text = "+1abc"
# result = re.match('\w{2}',text)
# print(result.group())


# {m,n}:匹配m-n之间的个数的字符:
text = "1abc+"
result = re.match('\w{1,3}',text)
print(result.group())
```


## 正则表达式案例:
```python
# 1. 验证手机号码:手机号码的规则是以1开头,第二位可以是34587,后面那9位就可以随意了。
# text = "18677889900"
# result = re.match("1[34587]\d{9}",text)
# print(result.group())


# 2. 验证邮箱:邮箱的规则是邮箱名称是用数字、英文字符、下划线组成的,然后是@符号,后面就是域名了。
# text = "[email protected]"
# result = re.match("\w+@[a-z0-9]+\.[a-z]+",text)
# print(result.group())


# 3. 验证URL:URL的规则是前面是http或者https或者是ftp然后再加上一个冒号,再加上一个斜杠,再后面就是可以出现任意非空白字符了。
# text = "https://baike.baidu.com/item/Python/407313?fr=aladdin"
# result = re.match("(http|https|ftp)://\S+",text)
# print(result.group())


# 4. 验证身份证:身份证的规则是,总共有18位,前面17位都是数字,后面一位可以是数字,也可以是小写的x,也可以是大写的X。
text = "36530019870716234x"
result = re.match("\d{17}[\dxX]",text)
print(result.group())
```

## 开始/结束/贪婪和非贪婪:
```python
# ^:以...开头:
# text = "hello world"
# result = re.search("world",text)
# print(result.group())


# $:以...结尾:
# text = "hello world"
# result = re.search("hello$",text)
# print(result.group())
# text = ""
# result = re.search("^$",text)
# print(result.group())


# |:匹配多个字符串或者表达式:

# 贪婪和非贪婪:
# text = "12345"
# result = re.search("\d+?",text)
# print(result.group())


# 案例1:提取html标签名称:
# text = "<h1>这是标题</h1>"
# result = re.search("<.+?>",text)
# print(result.group())


# 案例2:验证一个字符是不是0-100之间的数字:
# 0,1,99,100
# 01
text = "101"
result = re.match("0$|[1-9]\d?$|100$",text)
print(result.group())
```


## 转义字符和原生字符串:
```python
# Python中的转义字符:
# raw
# text = r"hello\nworld"
# print(text)


# 正则表达式中的转义字符:
# text = "apple price is $99,range price is $88"
# result = re.findall("\$\d+",text)
# print(result)


# 原生字符串和正则表达式:
# 正则表达式的字符串解析规则:
# 1. 先把这个字符串放在Python语言层面进行解析。
# 2. 把Python语言层面解析的结果再放到正则表达式层间进行解析。
text = "\cba c"
# result = re.match("\\\\c",text) # \\\\c =(Python语言层面)> \\c =(正则表达式层面)> \c
result = re.match(r"\\c",text) # \\c =(正则表达式层面)> \c
print(result.group())
```

## 分组:
```python
text = "apple price is $99,orange price is $88"
result = re.search('.+(\$\d+).+(\$\d+)',text)
print(result.groups())

# group()/group(0):匹配整个分组
# group(1):匹配第一个分组
# group(2):匹配第二个分组
# groups():获取所有的分组
```


## re中常用的函数:
```python
# findall:查找所有满足条件的
# text = "apple price is $99,orange price is $88"
# result = re.findall(r'\$\d+',text)
# print(result)

# sub:根据规则替换其他字符串
# text = "nihao zhongguo,hello world"
# new_text = text.replace(" ","\n")
# new_text = re.sub(r' |,','\n',text)
# print(new_text)
# html = """
# <div class="job-detail">
#     <p>1. 3年以上相关开发经验 ,全日制统招本科以上学历</p>
#     <p>2. 精通一门或多门开发语言(Python,C,Java等),其中至少有一门有3年以上使用经验</p>
#     <p>3. 熟练使用ES/mysql/mongodb/redis等数据库;</p>
#     <p>4. 熟练使用django、tornado等web框架,具备独立开发 Python/Java 后端开发经验;</p>
#     <p>5. 熟悉 Linux / Unix 操作系统&nbsp;</p>
#     <p>6. 熟悉 TCP/IP,http等网络协议</p>
#     <p>福利:</p>
#     <p>1、入职购买六险一金(一档医疗+公司全额购买商业险)+开门红+全额年终奖(1年13薪,一般会比一个月高)</p>
#     <p>2、入职满一年有2次调薪调级机会</p>
#     <p>3、项目稳定、团队稳定性高,团队氛围非常好(汇合员工占招行总员工比例接近50%);</p>
#     <p>4、有机会转为招商银行内部员工;</p>
#     <p>5、团队每月有自己的活动经费,法定节假日放假安排;</p>
#     <p>6、办公环境优良,加班有加班费(全额工资为计算基数,加班不超过晚上10点,平日加班为时薪1.5倍,周末加班为日薪2倍,周末加班也可优先选择调休,管理人性化)。</p>
# </div>
# """
# new_html = re.sub(r'<.+?>',"",html)
# print(new_html)


# split:根据规则分割字符串
# text = "nihao zhongguo,hello world"
# result = re.split(r' |,',text)
# print(result)


# compile:编译正则表达式
text = "apple price is 34.56"
# r = re.compile(r"""
# \d+ # 整数部分
# \.? # 小数点
# \d* # 小数部分
# """,re.VERBOSE)
# result = re.search(r,text)
result = re.search(r"""
\d+ # 整数部分
\.? # 小数点
\d* # 小数部分
""",text,re.VERBOSE)
print(result.group())
```
如果想要在正则表达式中加注释,那么需要在正则表达式的函数最后加一个`re.VERBOSE`。

标签:group,正则表达式,text,用法,re,result,print,match,大全
From: https://blog.csdn.net/qq_54030651/article/details/136889590

相关文章

  • docker 的常见用法
      #docker安装mysqlsudodockerpullmysql:5.7#docker启动mysqlsudodockerrun-p3306:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmysql......
  • ThreadLocal详解及用法示例
    ThreadLocal概念ThreadLocal 是Java并发包(java.util.concurrent)中提供的一个类,它的主要作用是在多线程环境下为每个线程提供一个独立的变量副本,使得每个线程在访问 ThreadLocal 时获取到的都是自己的私有变量,而不是共享的同一个变量。换句话说,ThreadLocal 能够隔离线程间......
  • fileinputstream的主要用法
    importjava.io.*;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{//字节流读数据//FileInputStreamfileInputStream=newFileInputStream("C:\\\\Users\\\\31339\\\\Desktop\\\\新建文件夹(7)\\\......
  • 计算机选择题真题(大全)
    计算机系统(132)计算机完成一条指令所花费的时间称为一个(指令周期)顺序程序不具有(并发性)总线带宽是指总线的(数据传输率)一进程已获得除CPU以外的所有所需运行资源,经调度分配CPU给它后,该进程将进入(运行状态)CPU芯片内部连接各元件的总线是(内部总线)如果一个进程在运行时因某种原因......
  • javascript:void(0);用法及常见问题解析
    javascript:void(0);是一个常见的JavaScript代码片段,通常用于在HTML中作为超链接的href属性值或者事件处理函数的返回值。下面是关于它的用法和常见问题的解析:用法:作为超链接的href属性值:<ahref="javascript:void(0);">点击这里</a>这样做的作用是让点击链......
  • C#中的params的用法(可变数组)
    最近小编看C#视频,听到小杨老师讲到可变数组,涉及到一个param修饰符,有点不太明白,于是小编站在巨人的肩膀上开始了探索和学习,略有了解,分享给大家哟~【一】params是什么?params是一个计算机函数,表示函数的参数是可变个数的,即可变的方法参数,用于表示类型相同,但参数数量不确定。C#开发语......
  • java lambda简单用法
    一、背景介绍        lambda表达式不算是什么新奇的东西,jdk8诞生也好多年了,但是lambda表达式据我观察,在我多年的开发生涯中,周围同事用的其实不多,具体原因可能还是说不了解,习惯了过去的编程方式等等,其实自己不了解的东西不要抗拒,个人理解都是一个熟悉的过程,熟练以后也......
  • [求职避坑大全] - 过来人给出的40条求职/面试建议
    NO.1人事相关的所有都要和hr确认并做好记录,以便不备之需。NO.2面试中可能有很多不符合法律规定地方,如无薪试岗,半年缴纳社保,没有加班费等等以上三个借口。NO.3面试心仪公司前还是先挑几个你不想去的小公司练手,找找状态。NO.4在一线城市尽量不要找注资及实交太少的公司,这种公司......
  • 操作系统实验-与文件读写有关的系统调用函数用法
    1、open函数点击查看代码#include<fcntl.h>//头文件intopen(constchar*pathname,intflags,mode_tmode);pathname:要打开文件的路径名;flags:用于指定文件的打开方式和行为,以下是一些常见的标志,都通过宏进行了定义;O_RDONLY:只读方式打开文件。O_WRONLY:只写方式打......
  • 模型网站大全
    sketchfab价格:免费、付费格式:obj、max、3ds、c4d、skp、ma/mb、blend、dae、stl、fbx、gltf、glb、usdz备注:没有源文件Turbosquid价格:免费、付费格式:fbx、gltf、mtl、obj备注:可以下载源文件(c4d或者blender的),包括纹理的文件也可以下载,可以直接还原看到的效果图CGtrader价格......