理论上,理论和实践没有区别。但实践上,是有区别的。|

KMP

园龄:3年6个月粉丝:4关注:18

正则表达式

一、元字符

元字符:即为有特定含义的字符,常见的元字符如下

代码 说明
| 选择,例如:a|b表示a或b
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$ 匹配字符串的结束

二、反义字符

反义字符:多用于查找除某个字符以外其他任意字符均可以的情况

常用的反义字符如下:

代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

三、限定字符

限定字符多用于重复匹配次数

常用的限定字符如下

代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
重复n次
重复n次或更多次
重复n到m次

四、优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符 描述
\ 转义符
(), (? : ), (?=),[] 圆括号和方括号
*, +, ?, {n}, {n,}, 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

四、子组结构

代码 说明
(...) 匹配并捕获括号内容
(?: ...) 匹配不捕获括号内容
(?'name'...)或(?,...)或(?P...) 命名捕获组
(?(1)yes|no) 条件语句

五、修饰符

下表列出了正则表达式常用的修饰符:

修饰符 含义 描述
i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
g global - 全局匹配 查找所有的匹配项。
m multi line - 多行匹配 使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

image-20220706111053858

案例 :

^(?P<userid>\d+)访问了(?P<tag>\d+)类别的(?P<newid>\d+)新闻$

>测试文本
17访问了2516类别的31417新闻
17访问了2516类别的31418新闻
17访问了2516类别的31419新闻
17访问了2516类别的31420新闻
17访问了31417新闻
17访问了31417新闻
17访问了31417新闻

附录:正则表达式提取值的一些问题处理

1、通常情况就是单规则直接提取

给定字符串:gold,100000,1000,-1;addUp,71,599,-1;addUp,72,1000,-1;addUp,73,1065,-1;addUp,74,1002,-1;addUp,75,999,-1

单规则提取

img

2、多规则提取匹配多的值

个人采用如下代码实现:

pattern_list=[r"^(?P<userid>.*)访问了(?P<tag>.*)类别的(?P<newid>.*)新闻$",r"^(?P<userid>.*)收藏了(?P<newid>.*)新闻$",r"^(?P<userid>.*)收藏了(?P<newid>.*)新闻$"]
User_behavior=[UserRead,UserCollections,UserLikes]
for pattern,beheavior in zip(pattern_list,User_behavior):
    user_action=logtables['message'].str.extract(pattern)
    #user_action为列表类型

3、按照要求提取指定的字符串

以下列出 ?=、?<=、?!、?<! 的使用区别

exp1(?=exp2):查找 exp2 前面的 exp1。

img

(?<=exp2)exp1:查找 exp2 后面的 exp1。

img

exp1(?!exp2):查找后面不是 exp2 的 exp1。

img

(?<!exp2)exp1:查找前面不是 exp2 的 exp1。

img

学习正则关键: 多练,正则练习网站
参考文章 : (正则表达式提取值的一些问题处理_格林爱通话的CSDN博客

posted @   KMP  阅读(72)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Variations on the Kanon by Pachelbel George Winston
Variations on the Kanon by Pachelbel - George Winston
00:00 / 00:00
An audio error has occurred.