正则表达式

分两个部分,首先讲一下正则表达式的写法,然后是python和java中正则表达式的编程

零、正则表达式的一般理论

形式语言与自动机

一、正则表达式的一般写法

1、 操作符

*: 表示将前面模式匹配0次或者多次
+:表示将前面模式匹配0次或者多次
?:表示将前面模式匹配0次或者1次
{M,N}: 表示将前面模式匹配M次到N次
. :通配符
[] : 匹配字符组中的任意一个字符
[^] : 匹配补字符组中的任意一个字符
():子组 子表达式,可以对其使用各种操作符
|:两组模式中选一个 OR操作符

2、特殊记号:

\d : 匹配所有数字
\w: 匹配所有数字、字母
\s: 匹配所有空白符

3、例子:

例1:希望在一段字符串中匹配IP地址

“([0-9]*).([0-9]*).([0-9]*).([0-9]*)”
这样匹配了之后还需要检查

例2:把类似于下面这样的东西提取出他的信息

这是windows CMD中的一些个文件记录,如果是文件,那么中间表示其大小,如果是文件夹,则表示<DIR>,前面是
2019/05/04 15:22 329,909,920 CLion-2019.1.2.exe
2019/03/25 22:30 <DIR> CloudMusic

利用下面表达式即可

([0-9]{4}/[0-9]{2}/[0-9]{2})[ ]*([0-9]{2}:[0-9]{2})[ ]*(<DIR>|[0-9]{1,3}(,[0-9]{1,3})*)[ ]*(.*)",

例3:统计化学式子中的所有原子个数

例如:(CH3)2CHCOOH:
要求程序输出结果为: C4H8O2
如何解决这个问题?
首先可以获得一个book,记录所有的原子

这个正则表达式可以完成任务
“[A-Z][a-z]|[A-Z]”

这个用来分割,就是把括号的部分摘出来
((\w+))([0-9]*)

现在变成若干小段,每一段都不含括号,之后用一个
“([A-Z][a-z]|[A-Z])([0-9])*”
即可完成任务

二、python中的正则表达式

re包中实现了函数:

函数名函数作用
match(pattern, string):返回从头开始第一次匹配,通过返回值的group方法得到具体的串:
search(pattern, string):返回第一次匹配,通过返回值的group方法得到具体的串:
findall(pattern,string):返回一个匹配列表

通过这些方法,就可以完成匹配工作了

函数名函数作用
split(pattern, string):把所有匹配的地方做分割
sub(pattern, string):把所有匹配的地方做替换
例5:按空格分割,允许多个空格

re.split("[\s]*",“223 3213 3 123”)

这比split方法高级一些,可以实现随意的分割

例6:给出一篇英文文本,统计词频

word_list = re.findall("([A-Za-z]+)(’([ts]|re))?","".join(open(“D:/1.txt”).readlines()))
print(word_list)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值