python正则表达式元字符(vba正则表达式元字符)
大家好,今天小编来为大家解答以下的问题,关于python正则表达式元字符,vba正则表达式元字符这个很多人还不知道,现在让我们一起来看看吧!
Python其实很简单 第十一章 正则表达式
正则表达式是一个特殊的字符序列,它用来检查一个字符串是否与某种模式匹配。正则表达式在编译程序中至关重要,但并不是每个人都需要特别深入的学习和掌握。在此,只介绍一些最基本的应用。
1、元字符
元字符是构成正则表达式的一些特殊字符。在正则表达式中,元字符被赋予了新的含义。
下面介绍一些常用的元字符及其含义:
.匹配除换行符以外的任意字符。
w匹配字母、数字、下划线或汉字。
W匹配w所匹配的字符以外的字符。
s匹配单个空白符(包括Tab键和换行符)。
S匹配除s匹配的字符以外的字符。
d匹配数字。
b匹配单词的分界符,如:空格、标点符号或换行符。
^匹配字符串的开始
$匹配字符串的结束
2、限定符
限定符是在正则表达式中用来指定数量的字符。常用的限定符有:
?匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom
+匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm
*匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm
{n}匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm
{n,}匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm
{n,m}匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm
3、方括号”[ ]”的用途
方括号“[ ]”里可以列出某个字符范围。如:[aeiou]表示匹配任意一个元音字母,[zqsl]表示匹配姓氏“赵钱孙李”的拼音第一个字母。
4、排除字符
方括号”[ ]”中的“^”字符表示排除的意思,如:[^aeiou]表示匹配任意一个非元音字母的字符。
5、选择字符
字符“|”相当于“或”。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如”-”或“-”的电话号码格式。
6、转义字符
对于已经用于定义元字符和限定符的字符,需要加转义符“”来表示。
如:为了匹配形如“192.168.0.1”的IPv4地址(1~255.0~255.0~255.0~255),可以用这样的正则表达式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
这里解释一下第一段IP地址的规则,取值范围为1~255,可分解为以下情况:
250~255:25[0-5];
200~249:2[0-4][0-9];
100~199:[01]{1}[0-9]{2};
0~99: [0-9]{1}[1-9]
再加上”.”:.
其他三段地址和第一段相似。
7、“()”可以用于分组
在正则表达式中,用“()”括起来的部分是一个整体。
8、r(或R)的意义
在正则表达式中,为了保证模式字符串为原生字符串(没有经过加工处理的字符串),可以在模式字符串前加上一个字符‘r’或‘R’。例如:
#这里用到对的re.match()方法接下来介绍
>>> import re#导入re模块
>>> re.match('bPy[a-z]+','Python')#表达式'bPy[a-z]+'不能匹配’Python’
>>> re.match('bPy[a-z]+','Python')#表达式'bPy[a-z]+'可以匹配’Python’
在上述代码中,原本要用作匹配单词开始或结束的元字符’b’在表达式中字符串中会被视为转义一个字符‘b’,为了转义’b’就不得不再加一个’’符号。
也可以采用下面的方法:
>>> re.match(r'bPy[a-z]+','Python')#加字符’r’,可以保证原生字符串
9、match()方法
Match()方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回 none。
语法格式:
re.match(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
import re#导入re模块
print(re.match('www','www.python.org/').span())#span()函数可以获取匹配的位置
print(re.match('org','www.python.org'))
输出结果为:
(0, 3)#在位置0到3(不包括3)匹配成功
None#从起始位置未能匹配成功
10、search()方法
search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回Match对象,否则返回None。
语法格式:
re.search(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例如:
>>> re.search(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.')
可以看出,目标字符串“It's easy to use Python, but it's not easy to learn Python.”中一共有两个‘Python’,search()方法可以从字符串的起始位置开始查找到‘Python’,当找到第一个匹配值后就停止查找,返回位置信息。
match()和search()的比较
match()要求目标字符串的起始位置就能匹配,search()对目标字符串全段进行逐次匹配,只要首次匹配成功就停止匹配。
请看下例:
>>> import re
>>> print(re.match(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
输出结果:None
11、findall()方法
findall()方法用于在整个字符串中搜索所有匹配的值,如果匹配成功,则返回以匹配值为元素的列表,否则返回空列表。
语法格式:
re.findall(pattern, string[, flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
>>> import re
>>>print(re.findall(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
输出结果:['Python','Python']
可以看出,findall()的结果没有指出匹配的具体位置。
12、正则表达式的应用
字符串替换
这里要用到sub()方法。它的语法格式如下:
re.sub(pattern, repl, string [,count] [,flgs])
其中,pattern是模式字符串;repl是用于替换的字符串;string是原字符串;可选参数count为模式匹配后替换的最大次数,省缺表示替换所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
>>> import re
>>> str1='x=36.567 y=123.234'
>>> str2=re.sub('.d+','',str1)#用空格代替小数点及其后的数字
>>> print(str2)
输出结果:x=36 y=123
分隔字符串
这里要用到split()方法。它的返回值为一个列表,它的语法格式如下:
re.split(pattern, string [,maxsplit] [,flgs])
其中,pattern是模式字符串;string是原字符串;可选参数maxsplit为最大拆分次数,省缺表示拆分所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
>>> import re
>>> str='白日依山尽,黄河入海流。欲穷千里目,更上一层楼!'
>>> re.split(r',|。|!',str)#按照“,”、“。”、“!”分隔字符串。
['白日依山尽','黄河入海流','欲穷千里目','更上一层楼','']
注意,返回值列表中多出了一个空字符。
Python正则表达式中特殊字符的转义:以|为例
在Python正则表达式中,特殊字符|需通过反斜杠转义为|以匹配其字面量,否则会被解释为逻辑“或”操作符,导致意外匹配结果。
1.|的默认行为与问题逻辑“或”操作符:在正则表达式中,|默认表示匹配左侧或右侧的子模式。例如,apple|banana会匹配"apple"或"banana"。当模式仅为|时,它会被解释为匹配空字符串或空字符串,即任何字符串的任意位置(包括空字符串本身)。
示例代码:import rere.search('|','e')#匹配成功,因为空字符串存在于任何位置
2.匹配字面量|的转义方法使用反斜杠转义:若需匹配|本身而非逻辑“或”,需在|前添加反斜杠,即|。示例修正代码:import pandas as pdimport numpy as npimport redf_test= pd.DataFrame(np.array([['a|b','b','c|r'], ['e','f','g']]), columns=['First','Second','Third'])print("原始DataFrame:")print(df_test)print("使用转义后的'|'进行搜索的输出:")for elem in df_test.get('First'): x= bool(re.search(r'|', elem))#正确转义 if x: print(elem)
输出结果:原始DataFrame: First Second Third0 a|b b c|r1 e f g使用转义后的'|'进行搜索的输出:a|b
关键点:使用原始字符串r'|'避免Python字符串转义冲突(如|需双重转义)。
转义后仅匹配包含字面量|的字符串(如'a|b'),排除'e'等无关结果。
3.其他常见需转义的特殊字符正则表达式中以下元字符需转义以匹配字面值:
.→.(匹配任意字符,除换行符)^→ ^(匹配字符串开头)$→$(匹配字符串结尾)*→*(匹配前一个字符零次或多次)+→+(匹配前一个字符一次或多次)?→?(匹配前一个字符零次或一次){}→{}(指定匹配次数)[]→ [](字符集)()→()(分组)→(转义字符本身)4.实用技巧与注意事项原始字符串(Raw Strings):建议使用r'pattern'形式编写正则表达式,避免Python字符串转义规则干扰。例如:
pattern= r'|'#正确#非原始字符串需双重转义:pattern='|'#可读性差动态正则表达式的安全转义:若模式包含用户输入或不确定内容,使用re.escape()自动转义所有特殊字符:
import reuser_input="file.txt|backup"escaped_input= re.escape(user_input)#输出:'file.txt|backup'5.总结核心原则:匹配元字符字面值时,必须用转义(如|)。代码健壮性:结合原始字符串和re.escape(),可避免转义冲突并防御恶意输入。应用场景:精确匹配包含特殊字符的文本(如日志分析、数据清洗),确保模式匹配的准确性。掌握这些方法后,可高效处理正则表达式中的特殊字符,避免常见陷阱。
python 提取字符串中的数字
使用正则表达式,用法如下:
##总结
## ^匹配字符串的开始。
##$匹配字符串的结尾。
## \b匹配一个单词的边界。
## \d匹配任意数字。
## \D匹配任意非数字字符。
## x?匹配一个可选的 x字符(换言之,它匹配 1次或者 0次 x字符)。
## x*匹配0次或者多次 x字符。
## x+匹配1次或者多次 x字符。
## x{n,m}匹配 x字符,至少 n次,至多 m次。
##(a|b|c)要么匹配 a,要么匹配 b,要么匹配 c。##(x)一般情况下表示一个记忆组(remembered group)。可以利用 re.search函数返回对象的 groups()函数获取它的值。
##正则表达式中的点号通常意味着“匹配任意单字符”
扩展资料
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
参考资料来源:
百度百科——正则表达式
OK,本文到此结束,希望对大家有所帮助。