网站界面
re.I
.
可以匹配任何一个字符、字母、数字、甚至是 . 本身\
对特殊字符(元字符)进行转义,\
本身也是一个元字符[]
定义字符集合-
只是一个普通字符,只能与 -
本身相匹配,-
字符不需要做转义^
对一个字符集合进行取非匹配^
作用于给定字符集合里的所有字符和字符区间,而不是仅限于紧跟在 ^
后面的那一个字符或字符区间元字符 | 说明 |
---|---|
[\b] | 回退(删除)一个字符 |
\f | 换页符 |
「\n」 | 「换行符」 |
「\r」 | 「回车符」 |
「\t」 | 「制表符」 |
\v | 垂直制表符 |
「\d」 | 「任何一个数字字符,等价于[0-9]」 |
「\D」 | 「任何一个非数字字符」 |
「\w」 | 「等价于[a-zA-Z0-9_]」 |
「\W」 | 「任何一个非字母数字或非下划线字符」 |
「\s」 | 「等价于[\f\n\r\t\v]」 |
「\S」 | 「任何一个非空白字符」 |
\E | 结束 \L 或 \U 转换 |
\l | 把下一个字符转换为小写 |
\L | 把 \L 到 \E 之间的字符全部转换为小写 |
\u | 把下一个字符转换为大写 |
\U | 把 \U 到 \E 之间的字符全部转换为大写 |
「(?=)」 | 「正向前查找」 |
「(?!)」 | 「负向前查找」 |
「(?<=)」 | 「正向后查找」 |
「(?<!)」 | 「负向后查找」 |
(?m) | 分行模式匹配 |
\r\n
是 Windows 所使用的文本行结束标签\n\n
即可\r
和一个必须被匹配的 \n
\x
来给出\0
来给出|
表示逻辑 或
操作符+
匹配一个或多个字符(或字符集合)*
匹配零个或多个字符(或字符集合)?
匹配零个或一个字符(或字符集合)[]
和 ?
,千万记得应该把 ?
放在字符集合的外面{}
来给出,把数值写在里面,重复的次数可以是0{m,n}
为匹配次数设定一个最小值和最大值{m,}
为匹配次数设定一个最小值{,n}
为匹配次数设定一个最大值?
后缀即可\b
指定单词的边界,用来匹配一个单词的开头和结尾\b
匹配且只匹配一个位置,不匹配任何字符\B
^
定义字符串开头,$
定义字符串结尾^\s*
匹配一个字符串的开头位置和随后的零个或多个空白字符\s*$
匹配一个字符串的结尾位置零个或多个空白字符re.S
()
来把子表达式当做一个独立元素group
的数组匹配对象1
开始计数(\1
)\n
;替换时,使用$n
」re.finditer(pattern,string,flags)
list_temp = []
for item in re.finditer(r'(?<=<h([1-6])>).*?(?=</h\1>)','<h1>一级标题</h1><h2>二级标题</h2><h3>这里是错误</h4>'):
list_temp.append(item.group())
list_temp
# ['一级标题', '二级标题']
?=
开头的子表达式?<=
结尾的子表达式\
和 +
之类的元字符;向后查找模式只能是固定长度!
替换掉 =
来取非import re
result = re.findall('工号是(.*?),','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生')
# ['110110', '120120']
group()
方法获取值,如果没有匹配到结果,返回 None
group()
的参数为 1 时,才会返回子表达式中的结果group()
的参数最大不能超过正则表达式里子表达式的个数import re
result = re.search('工号是(.*?),','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生').group(1)
# '110110'
import re
result1 = re.sub('\d+','119119','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生')
result2 = re.subn('\d+','119119','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生',1)
print(result1)
print(result2[0])
# 我的名字是张三,工号是119119,职业是法外狂徒;他的名字是李四,工号是119119,职业是医生
# 我的名字是张三,工号是119119,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生
import re
for item in re.finditer('\d+','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生'):
print(item.group())
# 110110
# 120120
import re
result1 = re.split('\d+','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生')
result2 = re.split('\d+','我的名字是张三,工号是110110,职业是法外狂徒;他的名字是李四,工号是120120,职业是医生',maxsplit=1)
print(result1)
print(result2)
# ['我的名字是张三,工号是', ',职业是法外狂徒;他的名字是李四,工号是', ',职业是医生']
# ['我的名字是张三,工号是', ',职业是法外狂徒;他的名字是李四,工号是120120,职业是医生']
import pandas as pd
df = pd.DataFrame(data=['纤美(CICI)','江中猴姑','PENTAL SOFTLY','25°', '卡士(CLASSY·KISS)'],
columns=['品牌全名'])
df
def chinese_name(x):
result = re.findall('[一-龟]',x)
return ''.join(result)
df['中文品牌名_自定义函数'] = df['品牌全名'].apply(chinese_name)
df
df['中文品牌名_findall'] = df['品牌全名'].str.findall('[一-龟]').apply(lambda x:''.join(x))
df
df['英文品牌名_contains'] = df['品牌全名'].str.contains('[a-zA-Z]',regex=True)
df
df['英文品牌名_match'] = df['品牌全名'].str.match('[a-zA-Z]')
df
df['品牌名_replace'] = df['品牌全名'].str.replace('[0-9]','XX')
df
df['品牌名_extract'] = df['品牌全名'].str.extract(r'([a-zA-Z].*)',expand=True)
df['品牌名_extract'] = df['品牌名_extract'].str.replace('\)','')
df
对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,感兴趣的同学可以直接在各大电商平台搜索书名了解:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/junhongzhang/article/details/121689730
内容来源于网络,如有侵权,请联系作者删除!