Python - ^在正则表达式中的作用

^在正则表达式中有两个作用,一是表达以什么开头,二是表达对什么取反。有时候经常傻傻的分不清楚,接下来给大家详细介绍该怎么用这个^
准备一个python文件test.py,借用re.search函数举例说明

# coding=utf-8
import re

s = [‘abc-123-cba‘,       #‘abc‘在最前面
    ‘123-abc-aabbcc-123‘, #‘abc‘在中间
    ‘a-2-3-b-1‘,          #最前面是‘a‘
    ‘b-x-c-a-1‘,          #最前面是‘b‘
    ‘z-a-1‘,              #‘a‘在中间
    ‘x-y-z‘,              #字符串没有任何‘a‘,‘b‘,‘c‘
    ‘cbaabc‘              #字符串全是‘a‘,‘b‘,‘c‘组成
]

st = r‘abc‘
for i in s:
    m = re.search(st, i)
    if m:
        print(i)

1.当st = r‘abc‘时,执行python文件得到的结果如下    
abc-123-cba
123-abc-aabbcc-123
cbaabc
字符串中有‘abc‘就匹配成功

2.当st = r‘[abc]‘时,执行python文件得到的结果如下    
abc-123-cba
123-abc-aabbcc-123
a-2-3-b-1
b-x-c-a-1
z-a-1
cbaabc
字符串中只要有‘a‘或‘b‘或‘c‘,就匹配出来

3.当st = r‘^abc‘时,执行python文件得到的结果如下    
abc-123-cba
字符串中只有‘abc‘开头的才匹配出来

4.当st = ‘^[abc]‘时,执行python文件得到的结果如下 
abc-123-cba
a-2-3-b-1
b-x-c-a-1
cbaabc
字符串由‘a‘或‘b‘或‘c‘开头的都匹配出来了

5.当st = ‘[^abc]‘时,执行python文件得到的结果如下 
abc-123-cba
123-abc-aabbcc-123
a-2-3-b-1
b-x-c-a-1
z-a-1
x-y-z
字符串只要有除‘a‘和‘b‘和‘c‘的字符就都匹配出来了,这跟第三种情况是相反的   
   
总结:
‘abc‘表示字符串中有‘abc‘就匹配成功
‘[abc]‘表示字符串中有‘a‘或‘b‘或‘c‘就匹配成功
‘^abc‘表示字符串由‘abc‘开头就匹配成功
‘^[abc]‘表示字符串由‘a‘或‘b‘或‘c‘开头的,
‘[^abc]‘表示匹配‘a‘,‘b‘,‘c‘之外的字符。如果一个字符串是由‘a‘,‘b‘,‘c‘组合起来的,那就是假

当^表示取反的时候,只有一种情况,就是在中括号里面,而且是每一个字符之外的。所以千万不要把‘[^abc]‘看成是对‘abc‘字符串的取反。
如果想使用对‘abc‘字符串取反,则只能更改代码
st = r‘abc‘ 
for i in s:
    m = re.search(st, i)
    if not m

列举常用的取反:
‘[^a-z]‘ 所有小写字母之外的字符
‘[^a-zA-Z]‘ 所有大写和小写字母之外的字符
‘[^0-9]‘ 所有数字之外的字符

如果文章有错误,还望您指正。

原文地址:https://www.cnblogs.com/ddzj01/p/10927054.html

时间: 2024-10-31 12:58:29

Python - ^在正则表达式中的作用的相关文章

python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变

Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用.写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring.废话不多说,上俩栗子就能搞明白! 实例一: 不加wraps # -*- coding=utf-8 -*- from functools imp

【python】正则表达式中的转义问题

encode('string-escape') 解决 比如想匹配'\x0e\x0a'中的'\x'后的内容,这里希望把'\x0e'作为一个字符串,那么其中的\应该被转义. 未加转义的正则: p = '(?<=\x)[0-9A-Za-z]{2}' 直接这样写会报错,需要给\转义,于是变为 p = '(?<=\\x)[0-9A-Za-z]{2}' 但由于使用的时候,会先将p的内容转义,然后匹配,所以又变成了\x和原始数据匹配,又会出错.解决: p = '(?<=\\x)[0-9A-Za-z]{

Python正则表达式中的re.S的作用

在Python的正则表达式中,有一个参数为re.S.它表示"."(不包含外侧双引号,下同)的作用扩展到整个字符串,包括"\n".看如下代码: 1 import re 2 a = '''asdfhellopass: 3 worldaf 4 ''' 5 b = re.findall('hello(.*?)world',a) 6 c = re.findall('hello(.*?)world',a,re.S) 7 print 'b is ' , b 8 print 'c

Python正则表达式中的re.S

title: Python正则表达式中的re.Sdate: 2014-12-21 09:55:54categories: [Python]tags: [正则表达式,python]--- 在Python的正则表达式中,有一个参数为re.S.它表示多行匹配.看如下代码: import re a = '''asdfsafhellopass: 234455 worldafdsf ''' b = re.findall('hello(.*?)world',a) c = re.findall('hello(.

Python字符串和正则表达式中的反斜杠(&#39;\&#39;)问题

在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 In [1]: print('abc\ndef') # '\n'具有换行的作用 abc defg In [2]: print('abc\tdef') # '\t'具有制位符的作用 abc defg 我们还可以用'\'来转义特殊字符,使其成为普通字符,比如 In [3]: print('abc\\tdef') # 使'\'成为一个普通的字符,没有转义作用 abc\tdef In [4]: prin

Python基础要点:字符串和正则表达式中的反斜杠(‘\‘)问题详解

给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下. 在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 1 In [1]: print('abc\ndef') # '\n'具有换行的作用 2 abc 3 defg 4 5 In [2]: print('abc\tdef') # '\t'具有制位符的作用 6 abc defg 我们还可以用'\'来转义特殊字符,使其成为普通字符,比如 1

python 正则表达式中反斜杠(\)的麻烦和陷阱

这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题.(1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为在正则表达式中,"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四

python&#160;正则表达式中反斜杠(\)的麻烦和陷阱&#160;(转)

这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题.(1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为在正则表达式中,"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四

app.use 的作用 正则表达式中/ 表示什么 nodejs pm2 怎样安装 乱码怎么解决

1.express 框架中的app.use是什么作用? 手册上写着是: app.use([path], function)Use the given middleware function, with optional mount path, defaulting to "/". 就是引入一个所谓的中间件,其实就是用来再实际请求发生之前hack req和res对象来实现一些功能,比如果最简单的logger就是在res的end事件上添加监听写入一条日志记录,express使用connec