一日一技:正则表达式同一个小括号两种意思

简介: 一日一技:正则表达式同一个小括号两种意思

在Python里面,当我们要从一段正则表达式中提取出一部分内容的时候,我们可以把这部分内容用小括号包起来。例如:从字符串我的密码123456abc中提取123456abc,我们可以这样写正则表达式:


import re
s = '我的密码123456abc'
password = re.findall('密码(.*?)$', s)
print(password)


运行效果如下图所示:


1.png


在这个例子里面,小括号的意思是“分组”。


但是,在正则表达式里面,小括号还有另外一个意思,那就是把几个符号放在一起,作为一个整体。


例如,还有另一个字符串我的口令123456abc,这里密码前面是口令,为了使用同一个正则表达式来从这两个句子里面提取密码,那么需要表达密码或口令(.*?)$这个意思。


但如果我们这样写:


密码|口令(.*?)$


它实际上表达的意思是密码令(.*?)$或者密口令(.*?)$


所以我们需要把(密码)口令作为整体来看待。此时,正则表达式本身支持使用括号来表示:


(密码|口令)(.*?)$


在正则表达式里面,小括号内部的|左右两侧的多个字符串会作为整体,这样就能表示密码(.*?)$口令(.*?)$了。


但是,正则表达式里面作为整体的小括号,与Python里面用来分组的小括号发生了冲突,于是我们会发现提取出来的内容并不是我们想要的:


2.png


可以看到,这里,(密码|口令)它同时即有正则表达式里面作为整体的功能,又有Python里面分组的功能。于是结果多出来了我们不想要的东西。


那么有什么办法让(密码|口令)只实现正则表达式里面的作为整体的功能,不实现Python里面的分组功能呢?这个时候就需要使用正则表达式里面的一个组合符号?:了。

请大家对比下面三个结果:


3.png


可以看到,>.*?<<(?:.*?)>的作用是一样的。这就说明,以?:开头的小括号,它失去了分组的功能。


因此,我们把这个特征用到一开始的例子中:


>>> import re
>>> s = '我的密码123456abc'
>>> re.findall('(?:密码|口令)(.*?)$', s)
['123456abc']
>>> s = '我的口令123456abc'
>>> re.findall('(?:密码|口令)(.*?)$', s)
['123456abc']


运行效果如下图所示,完成任务:


4.png


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
写几个正则表达式:只允许输入汉字、数字、字母、中英文小括号,并且10个字符以内|只允许输入汉字、数字、字母、英文小括号|电话号码正则表达式
写几个正则表达式:只允许输入汉字、数字、字母、中英文小括号,并且10个字符以内|只允许输入汉字、数字、字母、英文小括号|电话号码正则表达式
281 0
|
JavaScript
js 正则表达式获取括号里面的内容
js 正则表达式获取括号里面的内容
js 正则表达式获取括号里面的内容
|
JavaScript
正则表达式小括号的作用
1.正则表达式中的圆括号的作用是对字符进行分组,并保存匹配的文本。 2.圆括号用法I:对字符或元字符进行分组,这样在圆括号内就可以对字符组合使用限定符。     eg. 匹配A+一个数字+A+一个数字:(A\d){2} 3.圆括号用法II:表示可选择性。
1773 0
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r&#39;string&#39;`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
|
6月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
66 2
|
6月前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
6月前
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
|
6月前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
6月前
|
Python
Python中re模块的正则表达式
【6月更文挑战第2天】了解Python的re模块,它是处理正则表达式的核心工具。正则表达式用于在文本中查找特定模式。本文讨论了re模块的用法和技巧,包括导入模块、匹配、分组、替换文本、编译正则表达式以及使用预定义字符类、量词、锚点等高级功能。通过实例展示了如何在Python中执行这些操作,帮助提升文本处理能力。掌握这些技巧将使你更有效地利用正则表达式解决字符串处理问题。