因工作加班无法每日更新,上期讲简单Python正则表达式使用,本期讲进阶用法
大家好。最近工作加班时间过长。因此没办法每天都给大家更新内容。实在抱歉。

上次我们讲了简单的python正则表达式使用。还结合了第0期的python文件和目录操作。以及第1期的python执行linux系统命令的方式。还有第2期的简单python正则表达式。相信现在你对平常那些简单的自动化脚本编写已基本游刃有余。比如查询进程线程号。执行gdb。执行系统命令监控系统内存使用和cpu使用情况。筛选top10进程等。这些简单的任务能够写出来。简单的自动化编译脚本也能够写出来。并且都已经能不费吹灰之力地完成。
今天 我们接着上期讲的简单正则表达式使用 继续来讲正则表达式的一些复杂的进阶使用
我们第一个要讲的就是正则表达式的组匹配。
组匹配的意思是,很多时候我们不只是想打印正则匹配的内容。而是想把正则匹配的内容保存下来。以便继续做后续处理。所以需要使用group方法。来获取匹配内容。并进行保存和进一步处理。
示例如下:
结果 = re.search(正则表达式“^(\w+), (\w+)#34;”,字符串“David, Benwick”) 其中,正则表达式表示以一个或多个单词字符开头,接着是逗号和一个或多个单词字符,再接着是“#34;” 字符串为“David, Benwick”
print(result)
<_sre.SRE_Match object; span=(0, 14), match='David, Benwick'>
//上面直接打印result
print(result.group())
David, Benwick // 打印了组匹配的结果
print(result[0])
David, Benwick // 0下标代表整个字符串
print(result[1])
David // 1下标代表组1匹配的结果
print(result[2])
Benwick // 2下标代表组2匹配结果
例子的需求如下
需求:
要求编写一个python函数其输入参数是形如xxxx, xxx的人名要对该输入参数的人名进行处理
取出 ","前后的人名字符串,然后进行颠倒后的结果返回。
异常输入,无法匹配时,直接返回原始字符串。
那我们如何来解这题呢?
代码如下:
>>> import re
>>> def rearrange_name(name):
针对的是名字进行搜索
... if result is None:
... return name
返回由结果的第二个元素和第一个元素组成的字符串 中间用空格隔开
...
// 如上我们定义了一个函数,然后下面调用
重新排列名字(“大卫,本威克”)
'Benwick David'
// 打印返回值颠倒
这就是一个简单例子。它能告诉大家怎样灵活运用正则表达式的组。匹配后的字符串能够被二次使用。
下面再讲一下重复,正则表达式中的 {} 代表着重复的概念。
示例如下:
打印对“are ghost”进行正则表达式搜索的结果,该正则表达式用于查找由五个英文字母组成的字符串
// 匹配的是有五个英文字符的字符串
<_sre.SRE_Match object; span=(4, 9), match='ghost'>
// 结果只匹配了ghost
这种通配符常常与findall函数一同使用。例如有一个常用场景。要在一个长字符串里找到所有五个英文字符的单词。
就可以使用下面的正则匹配:
>>> print(re.findall
(r"[a-zA-Z]{5}\s{1}",
一个吓人的鬼出现了,它十分恐怖
// 打印结果如下,匹配所有五个字符的单词
鬼魂
// 或者是匹配6个字符以上的单词
>>> print(re.findall
(r"[a-zA-Z]{6,}",
"a scary ghost appeared, it is very horrible"))
// 打印结果如下:
呈现出可怕的样子
最后 给大家一个简单的实战自动化脚本例子 该例子能从linux操作系统中获取进程PID
该函数接收一个参数log_line
... regex = r"\[(\d+)\]"
result等于对log_line执行re.search并传入regex
... if result is None:
... return ""
... return result[1]
打印(提取进程标识符(“你还好吗,运行这个进程标识符[12345]”))
12345
// 打印获取pid结果
上面的函数与ps等Linux命令一同使用。如此一来,便能够提取进程pid。
下一期 我们会接着讲解python自动化脚本编写 要是大家认为我讲得挺好 还是那句话 你的关注是我更新的动力 我会持续为你输出有用知识