超详细:正则表达式从入门到入门

本文章首发于公众号Python for Finance

链接:https://mp.weixin.qq.com/s/boLdKv1L31377dLOKQ6irw

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

匹配字符

代码 功能
. 通配符,匹配任意1个字符(除了\n换行)
[ ] 匹配[ ]中列举的字符,里面的元素之间存在“或”的关系,[abc]只能匹配a或b或c
\d 匹配数字,等价于[0,9]
\D 匹配非数字,等价于[^0-9]
\s 匹配空白,常见的空白符的形式有空格、制表符 (\t)、换行 (\n) 和回车 (\r)
\S 匹配非空白
\w 匹配非特殊字符,即a-z、A-Z、0-9、_、中文
\W 匹配特殊字符

\d \D

匹配数字

import re

str0 = """北向资金尾盘回流,全天净买入18.54亿元,连续4日加仓"""
result = re.findall(r'\d', str0)  # 加上r模式是为了防止Python中的转义字符与正则表达式中的元字符
print(result)

结果为:

['1', '8', '5', '4', '4']

匹配非数字

import re

str0 = """北向资金尾盘回流,全天净买入18.54亿元,连续4日加仓"""
result = re.findall(r'\D', str0)  # 加上r模式是为了防止Python中的转义字符与正则表达式中的元字符
print(result)

结果为:

['北', '向', '资', '金', '尾', '盘', '回', '流', ',', '全', '天', '净', '买', '入', '.', '亿', '元', ',', '连', '续', '日', '加', '仓']

\s \S

text = '''please  don't
leave  me
alone'''

result = re.findall(r'\s',text)
print(result)

结果为:

[' ', ' ', '\n', ' ', ' ', '\n']

量词:匹配多个字符

某个字符后的数量限定符(*+)用来限定前面这个字符允许出现的个数。最常见的数量限定符包括 *+(不加数量限定则代表出现一次且仅出现一次)

符号 匹配规则 示例
* 匹配前一个字符出现0到多次,即可有可无,等价于{0,} ab*c 匹配 ac, abc, abbc, abbbc
+ 匹配前一个字符出现1到多次,即至少有1次,等价于{1,} colou?r 匹配 colorcolour
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有,等价于{0,1} ab+c 匹配 abc, abbc, abbbc 等等,但不匹配 ac
{n} 匹配前一个字符出现n次
{n,} 匹配前一个字符至少出现n次
{n,m} 匹配前一个字符出现从n到m次
import re

str0 = """北向资金尾盘回流,全天净买入18.54亿元,连续4日加仓;其中沪股通净买入26.41亿元,深股通净卖出7.87亿元。"""
result = re.findall(r'\d+', str0) 
print(result)

“+”在正则表达式里代表的是“匹配前面的子表达式一次或多次”。

在“\d+”中,子表达式就是“\d”,一个“\d”是匹配一个数字,“\d+”则就是匹配一个或者多个数字。

结果为:

['18', '54', '4', '26', '41', '7', '87']

在以上结果中,数字被小数点分开了,如18.54被分成了18和54。那么我们可以再做这样的改进。

result = re.findall(r'[\d.]+', str0)
print(result)

[]方括号代表字符集合。匹配所包含的任意一个字符。“[\d.]”即匹配一个“\d”或者一个“.”字符,再带上加“+”,就可以匹配一个或者多个了。

结果为:

['18.54', '4', '26.41', '7.87']

星号*

*+:字符u可以出现0次或1次或者多次

a = re.findall(r'colou*r', 'color') 
print(a)
b = re.findall(r'colou*r', 'colour') 
print(b)
c = re.findall(r'colou*r', 'colouuur') 
print(c)

结果为:

['color']
['colour']
['colouuur']

加号+

u+:字符u可以出现 1 次或多次

a = re.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值