python正则表达式

https://www.jianshu.com/p/5b7adc5403c5

正则表达式的特殊符号

表示法表述正则表达式式例
literal匹配文本字符串的字面值foo
re1 I re2匹配正则表达式re1或re2foo l bar
.匹配任何字符串(除了\n之外)b.b
^匹配字符串起始部分^Dear
$匹配字符串终止部分/bin/*sh$
*匹配0次或多次前面出现的正则表达式[A-Za-z0-9]
+匹配1次或多次前面出现的正则表达式[a-z]+.com
?匹配0次或1次前面出现的正则表达式goo?
{N}匹配N次前面出现的正则表达式[0-9]{3}
{M,N}匹配M~N次前面出现的正则表达式[0-9]{5,9}
[...]匹配来自字符集的任意单一字符[aeiou]
[..x-y..]匹配x~y范围中的任意单一字符[0-9],[A-Za-z]
[^...]不匹配此字符集中出现的任何一个字符,包括某一范围的字符[aeiou],[A-Za-z]
(*l+l?l{})?用于匹配上面频繁出现符号的非贪婪版本(*、+、?、{}).*?[a-z]
(...)匹配封闭的正则表达式,然后另存为子组([0-9]{3})?,f(oo l u)bar
特殊符号  
\d匹配任何十进制数字,和[0-9]相同(\D与\d相反,不匹配任何非数值型的数字)data\d.txt
\w匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W与之相反)[A-Za-z_]\w+
\s匹配任何空格字符,与[\n\t\r\n\f]相同(与\S相反)of\sthe
\b

匹配一个单词边界,也就是指单词和空格间的位置。

例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”(与\B相反)

\bThe\b
\B匹配非单词边界

“er\B”能匹配“verb”中的“er”,

但不能匹配“never”中的“er”

\N匹配已保存的子组N(参加上面的(...))price:\16
\c逐字匹配任何特殊字符c.,\,*
\A(\Z)匹配字符串的起始(参见上面^$)\ADear
扩展表示法 
(?iLmsux)在正则表达式中嵌入一个或者多个特殊“标记”参数(或者通过函数/方法)(?x),(?im)
(?:...)表示一个匹配不用保存的分组(?:\w+.)*
(?P<name>...)像一个仅有name标识而不是数字ID标识的正则分组匹配(?P<data>)
(?P=name)在同一字符串中匹配由(?P<name)分组的之前文本(?P=data)
(?#...)表示注释,所有内容都被忽略(?#comment)
(?=...)如果...跟在字符串后面才做匹配,非获取匹配;称作正向前视断言(?=.com)
(?!...)如果...不跟在后面才做匹配操作,非获取匹配;称作负向前断言(?!.net)
(?<=...)如果...出现在字符串前面才做匹配,称作正向后视断言(?<=800-)
(?<!...)如果...不出现在字符串前面才做匹配,称作负向后断言(?<!192.168.)
(?(id/name)Y l N)

如果分组提供的id或name(名称)存在,就返回正则表达式的条件匹配Y,

如果不存在,就返回N;l N是可选项

(?(1)y l x)

 

正则表达式和Python语言 

Python语言中使用re模块的方法支持正则表达式。这里列出re模块常见的函数以方便查询(后面会介绍主要的函数使用方法)

函数描述
仅仅是re模块函数 
compile(pattern, flags = 0)使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
re模块函数和正则表达式对象的方法 
match(pattern, string, flags = 0)尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功就返回匹配对象,如果失败就返回None
search(pattern, string, flags = 0)使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功就返回匹配对象,如果失败就返回None
findall(pattern, string [, flags])查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
finditer(pattern, string[, flags])与findall()函数相同,但返回的不是一个列表,而是一个迭代器。对于每一次匹配,迭代器都返回一个匹配对象
split(pattern, string, max=0)根据正则表达式的模式分隔符,split函数将字符串分隔为列表,然后返回成功匹配的列表,分隔最多操作max次(默认分隔所有成功匹配的位置)
sub(pattern, repl, string, count = 0)使用repl替换所有正则表达式的模式在字符串中出现的位置,除非定义count,否则就将替换所有出现的位置
purge()清除隐式编译的正则表达式模式
常用匹配对象方法 
group(num = 0)返回整个匹配对象,或者编号为num的特性子组
groups(default = None)返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组)
groupdict(default = None)返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键(如果没有匹配成功,就返回一个空元组)
常用模块属性(用于大多数正则表达式函数的标记) 
re.I、re.IGNORECASE不区分大小写的匹配
re.L、re.LOCALE根据所使用的本地语言环境通过\w、\W、\b、\B、\s、\S实现匹配
re.M、re.MULTILINE^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾
re.S、re.DOTALL.(点号)通常匹配除了\n之外的所有单个字符,该标记表示"."能够匹配全部字符
re.X、re.VERBOSE通过反斜线转译,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并提高可读性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python正则表达式是一种强大的字符串处理工具,它可以用于在文本中查找、替换和提取特定模式的字符串。在Python中使用正则表达式,需要先导入`re`模块。 下面是一个简单的示例代码,演示了如何使用正则表达式在字符串中匹配特定的模式: ```python import re # 定义一个待匹配的字符串 string = "Hello, my email address is [email protected]" # 定义一个正则表达式模式,用于匹配邮箱地址 pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' # 使用re模块的findall()方法进行匹配 matches = re.findall(pattern, string) # 输出匹配的结果 print(matches) ``` 运行以上代码,输出结果会是`['[email protected]']`,即匹配到了字符串中的邮箱地址。 在正则表达式中,可以使用一些特殊字符和元字符来构建匹配模式。例如,`r'\b'`表示单词边界,`[A-Za-z0-9._%+-]`表示匹配字母、数字、点、下划线、百分号、加号和减号等字符。 除了匹配字符,还可以使用一些特殊的元字符来表示数量和位置。例如,`+`表示前面的字符出现一次或多次,`*`表示前面的字符出现零次或多次,`{2,}`表示前面的字符出现至少两次。 以上只是简单介绍了Python正则表达式的基本用法,实际上正则表达式还有很多高级用法和特性。你可以参考Python官方文档中关于`re`模块的详细说明来深入学习和理解正则表达式的使用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值