Python 进阶语法:正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

在 Python 中,使用 re 模块来处理正则表达式。re 模块提供了一组函数,允许你在字符串中进行模式匹配、搜索和替换操作。re 模块使 Python 语言拥有完整的正则表达式功能。

本文主要介绍 Python 中常用的正则表达式处理函数。

1  返回一个匹配对象

1.1  re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。

匹配成功 re.match 方法返回一个匹配的对象,否则返回 None。我们可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。

函数语法:re.match(pattern,string,flags=0)

参数说明:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串。
  • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

实例一:

import re  pattern = 'www'  
string = 'www.baidu.com'  
match = re.match(pattern, string, flags=0)  print(match)  # 输出:<re.Match object; span=(0, 3), match='www'>

这段代码使用Python的 re 模块来尝试在字符串string中匹配模式pattern

  • 我们可以使用 re.match()函数尝试从字符串 www.baidu.com 的起始位置匹配一个模式 www,如果不是起始位置匹配成功的话,match()会返回None
  • 在这个例子中,模式 www 确实出现在字符串www.baidu.com 的起始位置,所以 re.match()函数返回了一个匹配对象<re.Match object; span=(0, 3), match='www'>,表明它在字符串中找到了模式www。
  • span=(0, 3)表示匹配的范围是从字符串的第0个索引开始,到第3个索引之前结束(Python的切片语法是左闭右开的)。也就是说,它匹配了字符串中的'www'部分。

如果您想要从匹配对象中提取匹配的字符串,您可以使用group()方法:

print(match.group())  # 输出:'www'

group()方法返回re.Match对象表示的匹配字符串。因为没有使用括号在模式中创建任何捕获组,所以group()返回整个匹配的字符串。如果您使用了捕获组,group()方法可以用来提取捕获组的内容。

import re  pattern = '(www)\.(baidu)\.com'  
string = 'www.baidu.com'  
match = re.match(pattern, string, flags=0)  if match:  print(match.group())      # 输出:'www.baidu.com'  print(match.group(1))     # 输出:'www'  print(match.group(2))     # 输出:'baidu'  
else:  print("No match found.")

在这个例子中,pattern包含了两个捕获组:(www)(baidu),它们分别匹配了'www''baidu'group(1)返回第一个捕获组的内容,group(2)返回第二个捕获组的内容。

实例二:

import re
pattern = 'com'
string = 'www.baidu.com'
match = re.match(pattern,string,flags=0)
print(match)    # 结果:None

这个例子没有在起始位置匹配成功,match()返回None

实例三:

import reline = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)if matchObj:print("matchObj.group() : ", matchObj.group())print("matchObj.group(1) : ", matchObj.group(1))print("matchObj.group(2) : ", matchObj.group(2))
else:print("No match!!")

这段代码使用Python的 re 模块来匹配字符串 line 中的模式。

下面,逐步解释代码的每一部分。

  1. 你有一个字符串 line,内容为:"Cats are smarter than dogs"。
  2. 使用 re.match() 函数来尝试匹配这个字符串。你提供的正则表达式是:r'(.*) are (.*?) .*'
  3. 这个正则表达式的含义如下:(.*): 是一个捕获组。.表示匹配任何字符(除了换行符),*表示匹配前面的字符0次或多次。因此,(.*)可以匹配任意长度的字符串,直到遇到下一个模式。在这里,它会匹配"Cats"。are: 是字面量匹配,意味着它会匹配字符串中的"are"这个词。(.*?): 是另一个捕获组,但使用了?来使其变为非贪婪模式。非贪婪模式会尽可能少地匹配字符。在这里,它会匹配到"are"后面的第一个空格,因此它会匹配"smarter"。.*: 这会匹配从上一个捕获组后的任何字符,直到字符串的末尾。
  4. re.M | re.I是正则表达式的标志:re.M:多行模式,但在这种情况下,由于line只是一个单行字符串,所以这个标志没有实际效果。re.I:忽略大小写模式,这意味着匹配时不区分大小写。
  5. 匹配成功,matchObj将包含匹配的结果。你可以使用matchObj.group()来获取整个匹配的字符串,matchObj.group(1)来获取第一个捕获组的内容,matchObj.group(2)来获取第二个捕获组的内容。

1.2  re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:re.search(pattern, string, flags=0)

参数说明:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串。
  • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

实例一:

import reprint(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配# 返回结果:
# (0,3)
# (11,14)

 实例二:

import reline = "Cats are smarter than dogs"searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print ("searchObj.group() : ", searchObj.group())print ("searchObj.group(1) : ", searchObj.group(1))print ("searchObj.group(2) : ", searchObj.group(2))
else:print ("Nothing found!!")

1.3  re.match 与 re.search的区别

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。

import reline = "Cats are smarter than dogs"matchObj = re.match(r'dogs', line, re.M | re.I)
if matchObj:print("match --> matchObj.group() : ", matchObj.group())
else:print("No match!!")matchObj = re.search(r'dogs', line, re.M | re.I)
if matchObj:print("search --> matchObj.group() : ", matchObj.group())
else:print("No match!!")# 返回结果:
# No match!!
# search --> matchObj.group() :  dogs

2  替换字符串中的匹配项

2.1  re.sub()函数

Python 的re模块提供了re.sub用于替换字符串中的匹配项。

函数语法:re.sub(pattern, repl, string, count=0, flags=0)

参数说明:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。
  • 前三个为必选参数,后两个为可选参数。

实例一:前三个为必选参数,后两个为可选参数

import rephone = '139-6598-9685 # 这是一个电话号码'# 删除注释
num = re.sub(r'#.*$', '', phone)
print('电话号码 :' , num)# 移除非数字的内容
num = re.sub(r'\D', '', phone)
print('电话号码 :' , num)# 返回结果:
# 电话号码 : 139-6598-9685 
# 电话号码 : 13965989685

这段Python代码使用了正则表达式来处理一个包含电话号码的字符串。正则表达式是一种强大的文本处理工具,可以用来搜索、匹配和替换文本中的模式。

代码解释如下:

  1. phone = "139-6598-9685 # 这是一个电话号码":定义一个字符串变量phone,其中包含一个电话号码和一个注释。
  2. num = re.sub(r'#.*$', "", phone):使用re.sub()函数来替换字符串中的模式。这里,正则表达式 #.*$ 匹配从#字符开始到字符串末尾的所有字符。re.sub()函数将这些匹配到的字符替换为空字符串(即删除它们)。结果存储在变量num中。
  3. print ("电话号码 : ", num):打印处理后的字符串。这行代码将输出“电话号码 : 139-6598-985”,因为注释已被删除。
  4. num = re.sub(r'\D', "", phone):再次使用re.sub()函数,但这次使用正则表达式\D来匹配所有非数字字符。这个正则表达式将匹配任何不是数字的字符,并将它们替换为空字符串。结果再次存储在变量num中。
  5. print ("电话号码 : ", num):打印处理后的字符串。这行代码将输出“电话号码 : 13965989685”,因为所有非数字字符(包括连字符和注释)都已被删除。

总结:这段代码演示了如何使用正则表达式来删除字符串中的注释和非数字字符,从而提取出纯数字的电话号码。

实例二:repl参数是一个函数

import re# 将匹配的数字乘以 2
def double(matched):value = int(matched.group('value'))return str(value * 2)s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

这段Python代码使用了正则表达式来查找字符串 s 中的所有数字,并将这些数字乘以2。然后,它使用re.sub()函数将这些数字替换为它们乘以2后的结果。

让我们逐行解释这段代码:

  1. 定义一个名为double的函数,该函数接受一个匹配对象作为参数。

  2. value = int(matched.group('value')):从匹配对象中提取名为'value'的捕获组的值,并将其转换为整数。

  3. return str(value * 2):将整数值乘以2,然后将其转换回字符串并返回。

  4. s = 'A23G4HFD567':定义一个字符串s,其中包含字母和数字。

  5. print(re.sub('(?P<value>\d+)', double, s)):使用re.sub()函数来查找s中的所有数字(由\d+表示,其中\d匹配任何数字,+表示一个或多个)。对于每个匹配的数字,它调用double函数,并将结果替换原始匹配的数字。最后,它打印出替换后的字符串。

在这个例子中,正则表达式(?P<value>\d+)是一个命名捕获组。?P<value>命名了捕获组为"value",这样我们就可以在double函数中通过matched.group('value')来访问它。\d+匹配一个或多个数字。

re.sub()函数的第一个参数是正则表达式模式,第二个参数是要用于替换的函数(在这里是double函数),第三个参数是要搜索和替换的字符串(在这里是s)。

最终,这段代码将输出'A46G8HFD1134',这是将原始字符串s中的每个数字乘以2后得到的结果。

3  返回所有匹配项

3.1  re.findall()

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次, findall 匹配所有。

函数语法:re.findall(pattern, string, flags=0)

参数说明:

  • pattern 匹配模式。
  • string 待匹配的字符串。
  • flags  标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。

实例一:返回一个列表

import reresult1 = re.findall(r'\d+','runoob 123 google 456')
print(result1)# 返回一个列表['123', '456']

实例二:返回元组列表

import reresult = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)# 返回一个元组列表
# [('width', '20'), ('height', '10')]

3.2  finditer()

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

函数语法:re.finditer(pattern, string, flags=0)

参数说明:

  • pattern 匹配的正则表达式。
  • string 要匹配的字符串。
  • flags  标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

 实例一:

import reit = re.finditer(r"\d+", "12a32bc43jf3")
print(it)
# 返回结果:<callable_iterator object at 0x000001A93EE25FC8>for match in it:print(match.group())# 返回结果:
# 12
# 32
# 43
# 3

这段Python代码使用了re模块,它是Python的标准库之一,用于正则表达式操作。这段代码的目的是查找字符串"12a32bc43jf3"中所有的数字序列,并打印这些数字序列。

代码分析:

  1. re.finditer(pattern, string): 这个函数返回一个迭代器,其中包含字符串中所有与正则表达式模式匹配的非重叠匹配项。
  2. pattern = r"\d+": 这是一个正则表达式模式,其中\d代表任何数字(0-9),+表示匹配一个或多个前面的元素。因此,这个模式匹配一个或多个连续的数字。
  3. it = re.finditer(r"\d+","12a32bc43jf3"): 这行代码调用finditer函数,并将结果(一个迭代器)存储在变量it中。
  4. print(it): 这行代码打印迭代器对象本身,而不是迭代器的内容。它通常不是很有用,除非你想检查对象的类型或状态。
  5. for match in it: print (match.group() ): 这是一个循环,遍历迭代器it中的所有匹配项。对于每个匹配项,match.group()返回匹配的字符串,然后这个字符串被打印出来。

4  将匹配的字符串分割

4.1  split()

split 方法按照能够匹配的子串将字符串分割后返回列表。

语法:re.split(pattern, string[, maxsplit=0, flags=0])

参数:

  • pattern 匹配的正则表达式
  • string  要匹配的字符串
  • maxsplit  分割次数,maxsplit=1 分割一次,默认为0,不限制次数
  • flags  标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。

实例1:使用多个字符作为分割符

​import re  # 使用空格、逗号或句号作为分隔符
pattern = r'[,.\s]+'  
text = "apple, banana orange. grape"  
result = pattern.split(text)  
print(result)  # 输出: ['apple', 'banana', 'orange', 'grape']

实例2:保留分割符

import re  # 使用空格作为分隔符,但保留它  
text = "apple banana orange"  
result = re.split(r'(\s+)', text)  
print(result)  # 输出: ['apple', ' ', 'banana', ' ', 'orange']

 实例3:使用正则表达式的特殊字符作为分隔符

import re# 使用数字作为分隔符  
text = "1apple2banana3orange4"
result = re.split(r'\d+', text)
print(result)  # 输出: ['', 'apple', 'banana', 'orange', '']

 实例4:

import re  # 使用贪婪匹配来分割字符串,并且保留分隔符  
text = "aaa-bbb-ccc-ddd"  
result = re.split(r'(?=-)', text)  
print(result)  # 输出: ['aaa', '-', 'bbb', '-', 'ccc', '-', 'ddd']

在这个例子中,正则表达式 r'(?=-)' 是一个前瞻断言,它匹配一个位置,这个位置后面紧跟着一个短横线 -。由于这是一个位置而不是一个字符,所以 - 本身不会被消费掉,而是保留在结果列表中。

实例5:忽略空匹配项

import re# 分割字符串,但忽略空匹配项
text = "a,b,,d"
result = re.split(r',+', text)
print(result)  # 输出: ['a', 'b', 'd']

实例6:使用捕获组获来保留分割符

import re# 使用捕获组来保留分隔符
text = "aaa-bbb,ccc.ddd"
result = re.split(r'([-,.])', text)
print(result)  # 输出: ['aaa', '-', 'bbb', ',', 'ccc', '.', 'ddd']

5  正则表达式对象

3.1  re.compile() 函数

在Python中,正则表达式对象是通过re.compile()函数创建的,这个函数将一个字符串形式的正则表达式编译成一个Pattern对象,供后续使用。一旦你有了这个Pattern对象,你就可以使用它的各种方法来对文本进行匹配、查找、替换等操作。

函数语法:re.compile(pattern[,flags])

参数说明:

  • pattern : 一个字符串形式的正则表达式
  • flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

返回值:

  • 返回一个 Pattern 对象,这个对象包含了编译好的正则表达式,并提供了各种用于匹配、查找、替换等操作的方法。

3.2  正则表达式对象pattern的方法

3.2.1  findall(string, pos=0, endpos=len(string))

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,包含所有的匹配项。

import reresult1 = re.findall(r'\d+','runoob 123 google 456')
print(result1)pattern = re.compile(r'\d+')
result2 = pattern.findall('runoob 123 google 456')
print(result2)result3 = pattern.findall('run88oob123google456', 0, 10)
print(result3)# 返回结果:是一个列表
# ['123', '456']
# ['123', '456']
# ['88', '12']
3.2.2  search(string, pos=0, endpos=len(string))

在字符串中搜索匹配正则表达式的第一个位置,并返回一个Match对象。如果没有找到匹配项,则返回None。

import re# 编译一个正则表达式
pattern = re.compile(r'\d+')  # 匹配一个或多个数字# 使用编译后的 Pattern 对象进行匹配
match = pattern.search('The price is 123')
if match:print(match.group())  # 输出:123# 使用 flags 参数
pattern_ignore_case = re.compile(r'hello', re.IGNORECASE)
match = pattern_ignore_case.search('Hello, World!')
if match:print(match.group())  # 输出:Hello

在上面的例子中,我们首先使用 re.compile 编译了一个正则表达式 \d+,用于匹配一个或多个数字。然后,我们使用 search 方法在字符串中搜索匹配的子串,并使用 group 方法获取匹配的内容。在第二个例子中,我们使用了 re.IGNORECASE 标志位来忽略大小写进行匹配。 

3.2.3  match(string, pos=0, endpos=len(string))

从字符串的开始位置匹配正则表达式,并返回一个Match对象。如果没有找到匹配项,则返回None。

import repattern = re.compile(r'\d+')  # 用于匹配至少一个数字
m = pattern.match('one12twothree34four')  # 查找头部,没有匹配
print( m )
#  结果:Nonem = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
print( m )
#  结果:Nonem = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
print( m )   # 返回一个 Match 对象
#  结果:<re.Match object; span=(3, 5), match='12'>print(m.group(0))   # 可省略 0
#  结果:12
print(m.start(0))   # 可省略 0
#  结果:3
print(m.end(0))     # 可省略 0
#  结果:5
print(m.span(0))    # 可省略 0
#  结果:(3, 5)
3.2.4 sub(repl, string, count=0)

使用repl替换字符串中所有正则表达式的匹配项,并返回替换后的字符串。如果count不是0,则只替换前count个匹配项。

import re  # 编译一个正则表达式,匹配所有的小写字母 a  
pattern = re.compile(r'a')  # 使用 sub 方法进行替换操作,将所有的小写字母 a 替换为大写字母 A  
result = pattern.sub('A', 'banana')  print(result)  # 输出:BAnAnA
3.2.5  subn(repl, string, count=0)

sub方法类似,但返回一个元组,包含替换后的字符串和替换的次数。

import re# 编译一个正则表达式,匹配所有的小写字母 a
pattern = re.compile(r'a')# 使用 sub 方法进行替换操作,将所有的小写字母 a 替换为大写字母 A
result = pattern.subn('A', 'banana')print(result)  # 输出:('bAnAnA', 3)

6  正则表达式修饰符 - 可选标志

flags标志
re.IGNORECASE 或 re.I 使匹配对大小写不敏感
re.MULTILINE 或 re.M多行模式,改变 ^ 和 $ 的行为,使它们匹配字符串的每一行的开头和结尾。
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.DOTALL 或 re.S使 . 匹配包括换行符在内的任意字符。
re.ASCII使 \w, \W, \b, \B, \d, \D, \s, \S 仅匹配 ASCII 字符。
re.VERBOSE 或 re.X忽略空格和注释,可以更清晰地组织复杂的正则表达式。

这些标志可以单独使用,也可以通过按位或(|)组合使用。例如,re.IGNORECASE | re.MULTILINE 表示同时启用忽略大小写和多行模式。 

7  正则表达式模式

字符串使用特殊的语法来表示一个正则表达式。

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠时会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

反斜杠本身需要使用反斜杠转义。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 \\t )匹配相应的特殊字符。

下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

模式描述
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0个或多个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
re{ n,}精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b匹配a或b
(re)匹配括号内的表达式,也表示一个组
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re)类似 (...), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#...)注释.
(?= re)前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。
(?> re)匹配的独立模式,省去回溯。
\w匹配数字字母下划线
\W匹配非数字字母下划线
\s匹配任意空白字符,等价于 [\t\n\r\f]。
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]。
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z匹配字符串结束
\G匹配最后匹配完成的位置。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等。匹配一个换行符。匹配一个制表符, 等
\1...\9匹配第n个分组的内容。
\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试经典150题——生命游戏

​"Push yourself, because no one else is going to do it for you." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 之所以先暴力求解&#xff0c;是因为我开始也没什么更好的思路&#xff0c;所以就先写一种解决方案&#xff0c;没准写着写…

22-k8s中pod的调度-亲和性affinity

一、概述 在k8s当中&#xff0c;“亲和性”分为三种&#xff0c;节点亲和性、pod亲和性、pod反亲和性&#xff1b; 亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配&#xff0c;用于控制pod调度到哪些node节点上&#xff0c;以及不能调度到哪些node节点上&…

Linux-ls命令

目录 ls&#xff1a;查看目录下文件/文件夹 ls -l&#xff1a;列表显示文件 ls -a&#xff1a;显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la&#xff1a;以列表形式显示所有文件包括隐藏文件 ls -lt&#xff1a;按时间倒序查看文件 ls -R&#xff1a;递归方式…

_update_by_query简单使用

POST user_2023-11-01/_update_by_query {"script": {"source": "ctx._source.remark 测试","lang": "painless"},"query": {"term": {"domain.keyword": "talen"}} } "sour…

basicsr 安装问题

basicsr依赖torch和torchvision和tb-nightly 安装时&#xff0c;如果使用单一源安装&#xff0c;由于原的包不完整性&#xff0c;容易导致安装失败&#xff1a;tb-nightly清华源不存在 所以建议安装方式为&#xff1a; 例如我的requirements内容如下&#xff1a; basicsr1.4.…

【git 使用】超级好用的 git reset 和 git revert 功能对比和使用方法

首先你要知道 git 区分暂存区和工作区&#xff0c;如果你用过 sourcetree 你就会知道 git reset 超级好用 git reset 命令用于将当前分支的 HEAD 指针移动到指定的提交&#xff0c;并且可以选择性地修改工作区和暂存区的状态。git reset 命令有几种常用的用法&#xff0c;主要…

大语言模型高质量提示词工程技巧指南

目录 前言 第一章&#xff1a;提示词工程&#xff08;Prompt&#xff09;技术简介 第二章&#xff1a;提示词技术基础 第三章&#xff1a;角色提示 第四章&#xff1a;“让我们思考一下”提示 第五章&#xff1a;自洽提示 第六章&#xff1a;种子词提示 第七章&#xf…

突破百度地图Web API的配额限制,实现接口调用自由!

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 引言 好久没用百度地图开放平台,最近发现平台调整了接口调用的策略,增加了实名认证,…

2024年 BEC攻击激增,企业该如何防范?

根据Verizon发布的数据泄漏报告显示&#xff0c;2023年商业邮件欺诈(BEC)攻击占社交工程攻击的50%以上&#xff0c;黑客们不仅在增加攻击数量&#xff0c;而且在伪造邮件方面变得更加真实和自动化。 黑客分子不仅擅长用AI编写极具说服力的钓鱼电子邮件&#xff0c;而且还能逃避…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART&#xff0c;USART是STM32中非常重要的一个…

QT多线程应用及代码示例

一.多线程的原理和功能 1.多线程&#xff08;multithreading&#xff09;是指从软件或者硬件上实现多个线程并发执行的技术。 2.多线程的功能和作用主要包括&#xff1a; 提高程序的并发性和效率&#xff1a;多线程可以同时执行多个任务&#xff0c;不同的线程可以同时读写不…

代码随想录Day56 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

代码随想录Day56 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 300.最长递增子序列674.最长连续递增序列718.最长重复子数组 300.最长递增子序列 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 动态规划之子序列问题&#xff0c;元素不连续&#x…

大处着手、大小结合!现货黄金短线趋势如何判断?

现货黄金以交易灵活而著称&#xff0c;但是投资者发现&#xff0c;现货黄金的短期行情是多变的&#xff0c;要捕捉到现货黄金短期趋势其实也不容易。下面我们就来讨论一下判断现货黄金短线趋势的方法&#xff0c;这个方法的关键在于“大小结合”。 大指的是基本分析。很多投资者…

【leetcode】贪心算法介绍

详细且全面地分析贪心算法常用的解题套路、数据结构和代码逻辑如下&#xff1a; 找最值型&#xff1a; 每一步选择都是局部最优解&#xff0c;最后得到的结果就是全局最优解。常用于找零钱问题、区间覆盖问题等。一般情况下&#xff0c;可以通过排序将数据进行处理&#xff0c;…

腾讯云助力酒店IT系统上云,实现出海业务的双重优势

潮起潮涌&#xff0c;随着时代浪潮的翻涌&#xff0c;生活处处可见是巨大的变化&#xff0c;衣食住行都有了更多更大的需求&#xff0c;出门旅游观赏当地风景品尝特色美食的前提是要住好&#xff0c;只有休息好了才有更多的精力去游玩。酒店系统的升级上云让登记变得更加便捷&a…

【机器学习笔记】13 降维

降维概述 维数灾难 维数灾难(Curse of Dimensionality)&#xff1a;通常是指在涉及到向量的计算的问题中&#xff0c;随着维数的增加&#xff0c;计算量呈指数倍增长的一种现象。在很多机器学习问题中&#xff0c;训练集中的每条数据经常伴随着上千、甚至上万个特征。要处理这…

python opencv学习路线

目录 一:模块简介 二:图像读取 三:图像处理 四:图像识别

vue3总结

1 setup 概述 setup是Vue3中一个新的配置项个函数, 包含数据、方法等&#xff0c;是组合api的“舞台”。 特点如下&#xff1a; setup函数返回的对象中的内容&#xff0c;可直接在模板中使用。setup中访问this是undefined。setup函数会在beforeCreate之前调用&#xff0c;它…

新版本cesium的注意点

之前基于1.99版本写了一套插件&#xff0c;最近想替换成目前的新版本&#xff08;114&#xff09;&#xff0c;发现有很多写法都不能用了&#xff0c;这里做一下记录。 100版本发布了cesium/engine&#xff0c;cesium/widgets&#xff0c;引用方式上就会有些变化&#xff1b;1…

conda 所有的命令及其讲解

Conda 是一个开源的包管理器和环境管理器&#xff0c;可以用于安装、运行和升级跨平台的软件包和环境。Conda 很流行于数据科学、机器学习、科学计算等领域&#xff0c;因为它能够快速地安装、管理和部署软件包和环境。以下是 Conda 的一些主要命令及其简要说明&#xff1a; 环…