Python正则进阶

1.Python正则表达式模块

1.1 正则表达式处理字符串主要有四大功能

  1. 匹配 查看一个字符串是否符合正则表达式的语法,一般返回true或者false
  2. 获取 正则表达式来提取字符串中符合要求的文本
  3. 替换 查找字符串中符合正则表达式的文本,并用相应的字符串替换
  4. 分割 使用正则表达式对字符串进行分割。

1.2 Python中re模块使用正则表达式的两种方法

  1. 使用re.compile(r,f)方法生成正则表达式对象,然后调用正则表达式对象的相应方法。这种做法的好处是生成正则对象之后可以多次使用。
  2. re模块中对正则表达式对象的每个对象方法都有一个对应的模块方法,唯一不同的是传入的第一个参数是正则表达式字符串。此种方法适合于只使用一次的正则表达式。

1.3 正则表达式对象的常用方法

1. rx.findall(s,start, end):

  返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容,但是没有返回整个正则表达式匹配的内容

2. rx.finditer(s, start, end):

  返回一个可迭代对象
  对可迭代对象进行迭代,每一次返回一个匹配对象,可以调用匹配对象的group()方法查看指定组匹配到的内容,0表示整个正则表达式匹配到的内容

3. rx.search(s, start, end):

  返回一个匹配对象,倘若没匹配到,就返回None
  search方法只匹配一次就停止,不会继续往后匹配

4. rx.match(s, start, end):

   如果正则表达式在字符串的起始处匹配,就返回一个匹配对象,否则返回None

5. rx.sub(x, s, m):

  返回一个字符串。每一个匹配的地方用x进行替换,返回替换后的字符串,如果指定m,则最多替换m次。对于x可以使用/i或者/gid可以是组名或者编号来引用捕获到的内容。
  模块方法re.sub(r, x, s, m)中的x可以使用一个函数。此时我们就可以对捕获到的内容推过这个函数进行处理后再替换匹配到的文本。

6. rx.subn(x, s, m):

   与re.sub()方法相同,区别在于返回的是二元组,其中一项是结果字符串,一项是做替换的个数。

7. rx.split(s, m):
 分割字符串,返回一个列表,用正则表达式匹配到的内容对字符串进行分割

      如果正则表达式中存在分组,则把分组匹配到的内容放在列表中每两个分割的中间作为列表的一部分,如:

  rx = re.compile(r"(\d)[a-z]+(\d)")
  s = "ab12dk3klj8jk9jks5"
  result = rx.split(s)

返回['ab1', '2', '3', 'klj', '8', '9', 'jks5']

8. rx.flags():正则表达式编译时设置的标志
9. rx.pattern():正则表达式编译时使用的字符串

1.4 匹配对象的属性与方法

01. m.group(g, ...)

  返回编号或者组名匹配到的内容,默认或者0表示整个表达式匹配到的内容,如果指定多个,就返回一个元组

02. m.groupdict(default)

   返回一个字典。字典的键是所有命名的组的组名,值为命名组捕获到的内容
   如果有default参数,则将其作为那些没有参与匹配的组的默认值。

03. m.groups(default)

      返回一个元组。包含所有捕获到内容的子分组,从1开始,如果指定了default值,则这个值作为那些没有捕获到内容的组的值

04. m.lastgroup()

      匹配到内容的编号最高的捕获组的名称,如果没有或者没有使用名称则返回None(不常用)

05. m.lastindex()

      匹配到内容的编号最高的捕获组的编号,如果没有就返回None。

06. m.start(g):

      当前匹配对象的子分组是从字符串的那个位置开始匹配的,如果当前组没有参与匹配就返回-1

07. m.end(g)

      当前匹配对象的子分组是从字符串的那个位置匹配结束的,如果当前组没有参与匹配就返回-1

08. m.span()

      返回一个二元组,内容分别是m.start(g)和m.end(g)的返回值

09. m.re()

      产生这一匹配对象的正则表达式

10. m.string()

      传递给match或者search用于匹配的字符串

11. m.pos()

      搜索的起始位置。即字符串的开头,或者start指定的位置(不常用)

12. m.endpos()

      搜索的结束位置。即字符串的末尾位置,或者end指定的位置(不常用)

1.5 总结

  1. 对于正则表达式的匹配功能,Python没有返回true和false的方法,但可以通过对match或者search方法的返回值是否是None来判断
  2. 对于正则表达式的搜索功能,如果只搜索一次可以使用search或者match方法返回的匹配对象得到,对于搜索多次可以使用finditer方法返回的可迭代对象来迭代访问
  3. 对于正则表达式的替换功能,可以使用正则表达式对象的sub或者subn方法来实现,也可以通过re模块方法sub或者subn来实现,区别在于模块的sub方法的替换文本可以使用一个函数来生成
  4. 对于正则表达式的分割功能,可以使用正则表达式对象的split方法,需要注意如果正则表达式对象有分组的话,分组捕获的内容也会放到返回的列表中

2 正则匹配与替换

1.python里使用正则表达式的组匹配自引用

在前面学习过组的匹配,也就是一个括号包含就叫做一个组。在一个复杂一点的正则表达式里,比如像(1)(2)(3)这样,就匹配三组,如果想在这个表达式里引用前面匹配的组,怎么办呢?其实最简单的方式是通过组号来引用,比如像(1)(2)(3)——\1。使用“\num”的语法来自引用,如下例子:

#python 3.6
#
import re
 
address = re.compile(
    r'''
    # The regular name
    (\w+)               # first name
    \s+
    (([\w.]+)\s+)?      # optional middle name or initial
    (\w+)               # last name
    \s+
    <
    # The address: first_name.last_name@domain.tld
    (?P<email>
      \1               # first name
      \.
      \4               # last name
      @
      ([\w\d.]+\.)+    # domain name prefix
      (com|org|edu)    # limit the allowed top-level domains
    )
    >
    ''',
    re.VERBOSE | re.IGNORECASE)
 
candidates = [
    u'First Last <first.last@example.com>',
    u'Different Name <first.last@example.com>',
    u'First Middle Last <first.last@example.com>',
    u'First M. Last <first.last@example.com>',
]
 
for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Match name :', match.group(1), match.group(4))
        print('  Match email:', match.group(5))
    else:
        print('  No match')

结果输出如下:

Candidate: First Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com
Candidate: Different Name <first.last@example.com>
  No match
Candidate: First Middle Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com
Candidate: First M. Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com

在这个例子里,就引用了第1组first name和第4组last name的值,实现了前后不一致的EMAIL的姓名,就丢掉它。

2.python里使用正则表达式的组匹配通过名称自引用

在前学习过正则表达式的组可以通过组号来自引用,看起来使用很简单的样子,其实它还是不容易维护的,比如你某一天需要在这个正则表达式里插入一个组时,就发现后面的组号全打乱了,因此需要一个一个地更改组号,有没有更容易维护的方式呢?是有的,就是使用组名称来引用。如下面的例子:

#python 3.6

#
import re
 
address = re.compile(
    '''
    # The regular name
    (?P<first_name>\w+)
    \s+
    (([\w.]+)\s+)?      # optional middle name or initial
    (?P<last_name>\w+)
    \s+
    <
    # The address: first_name.last_name@domain.tld
    (?P<email>
      (?P=first_name)
      \.
      (?P=last_name)
      @
      ([\w\d.]+\.)+    # domain name prefix
      (com|org|edu)    # limit the allowed top-level domains
    )
    >
    ''',
    re.VERBOSE | re.IGNORECASE)
 
candidates = [
    u'cai junsheng <cai.junsheng@example.com>',
    u'Different Name <cai.junsheng@example.com>',
    u'Cai Middle junsheng <cai.junsheng@example.com>',
    u'Cai M. junsheng <cai.junsheng@example.com>',
]
 
for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Match name :', match.groupdict()['first_name'],
              end=' ')
        print(match.groupdict()['last_name'])
        print('  Match email:', match.groupdict()['email'])
    else:
        print('  No match')

结果输出如下:

Candidate: cai junsheng <cai.junsheng@example.com>
  Match name : cai junsheng
  Match email: cai.junsheng@example.com
Candidate: Different Name <cai.junsheng@example.com>
  No match
Candidate: Cai Middle junsheng <cai.junsheng@example.com>
  Match name : Cai junsheng
  Match email: cai.junsheng@example.com
Candidate: Cai M. junsheng <cai.junsheng@example.com>
  Match name : Cai junsheng
  Match email: cai.junsheng@example.com

在这个例子里,就是通过(?P=first_name)引用。

3.python里使用正则表达式的组匹配是否成功之后再自引用

在前面学习了通过名称或组号来引用本身正则表达式里的组内容,可以实现前后关联式的相等判断。如果再更进一步,比如当前面组匹配成功之后,就选择一种模式来识别,而不匹配成功又选择另外一种模式进行识别,这相当于if...else...语句的选择。我们来学习这种新的语法:(?(id)yes-expression|no-expression)。其中id是表示组名称或组编号, yes-expression是当组匹配成功之后选择的正则表达式,而no-expression 是不匹配成功之后选择的正则表达式。如下例子:

#python 3.6
#
import re
 
address = re.compile(
    '''
    ^
    # A name is made up of letters, and may include "."
    # for title abbreviations and middle initials.
    (?P<name>
       ([\w.]+\s+)*[\w.]+
     )?
    \s*
    # Email addresses are wrapped in angle brackets, but
    # only if a name is found.
    (?(name)
      # remainder wrapped in angle brackets because
      # there is a name
      (?P<brackets>(?=(<.*>$)))
      |
      # remainder does not include angle brackets without name
      (?=([^<].*[^>]$))
     )
    # Look for a bracket only if the look-ahead assertion
    # found both of them.
    (?(brackets)<|\s*)
    # The address itself: username@domain.tld
    (?P<email>
      [\w\d.+-]+       # username
      @
      ([\w\d.]+\.)+    # domain name prefix
      (com|org|edu)    # limit the allowed top-level domains
     )
    # Look for a bracket only if the look-ahead assertion
    # found both of them.
    (?(brackets)>|\s*)
    $
    ''',
    re.VERBOSE)
 
candidates = [
    u'Cai junsheng <Cai.junsheng@example.com>',
    u'No Brackets first.last@example.com',
    u'Open Bracket <first.last@example.com',
    u'Close Bracket first.last@example.com>',
    u'no.brackets@example.com',
]
 
for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Match name :', match.groupdict()['name'])
        print('  Match email:', match.groupdict()['email'])
    else:
        print('  No match')

结果输出如下:

Candidate: Cai junsheng <Cai.junsheng@example.com>
  Match name : Cai junsheng
  Match email: Cai.junsheng@example.com
Candidate: No Brackets first.last@example.com
  No match
Candidate: Open Bracket <first.last@example.com
  No match
Candidate: Close Bracket first.last@example.com>
  No match
Candidate: no.brackets@example.com
  Match name : None
  Match email: no.brackets@example.com

在这里,当name组出现时才会寻找括号< >,如果括号不成对就不匹配成功;如果name组不出现,就不需要括号,因此选择了另一个正则表达式。

4.python里使用正则表达式来替换匹配成功的组

在前面主要学习了怎么样匹配成功,都没有修改原来的内容的。现在来学习一个匹配成功之后修改相应的内容,在这里使用sub()函数来实现这个功能,同时使用引用组号来插入原来的字符,例子如下:

#python 3.6
#
import re
 
bold = re.compile(r'\*{2}(.*?)\*{2}')
 
text = 'Make this **cai**.  This **junsheng**.'
 
print('Text:', text)
print('Bold:', bold.sub(r'<b>\1</b>', text))

结果输出如下:

Text: Make this **cai**.  This **junsheng**.
Bold: Make this <b>cai</b>.  This <b>junsheng</b>.

5.python里使用正则表达式来替换匹配成功的组名

在前面学习了找到组之后,通过组序号来替换,比如像bold.sub(r'\1', text)),这里是通过\1来替换的,这样的方式就是简单,快捷。但是不方便维护,不方便记忆,要想把这点改进一下,就得使用组名称的方式来替换,就跟前面学习组名称匹配一样,给一个组起一个名称,也像为什么给每一个人起一个名称一样,方便区分和记忆。因此使用这样的语法:\g,这里\g是表示使用组名称,name是组名称。例子如下:

#python 3.6
#
import re
 
bold = re.compile(r'\*{2}(?P<bold_text>.*?)\*{2}')
 
text = 'Make this **cai**.  This **junsheng**.'
 
print('Text:', text)
print('Bold:', bold.sub(r'<b>\g<bold_text></b>', text))

结果输出如下:

Text: Make this **cai**.  This **junsheng**.
Bold: Make this <b>cai</b>.  This <b>junsheng</b>.

6.python里使用正则表达式来替换匹配成功的组并限定替换的次数

在前面学习过通过组名称来替换原来的字符串,这种替换只要出现相同的匹配成功,就会替换,而不管出现多少次。如果有一天,项目经理说要只需要替换第一个,或者前5个,怎么办呢?哈哈,这时你就得使用sub函数的count参数了,它可以指定替换的次数,轻松地解决了问题,例子如下:

#python 3.6 
#
import re
 
bold = re.compile(r'\*{2}(?P<bold_text>.*?)\*{2}')
 
text = 'Make this **cai**.  This **junsheng**.'
 
print('Text:', text)
print('Bold:', bold.sub(r'<b>\g<bold_text></b>', text, count=1))

结果输出如下:

Text: Make this **cai**.  This **junsheng**.
Bold: Make this <b>cai</b>.  This **junsheng**.

7.python里使用正则表达式来替换匹配成功的组并输出替换的次数

在前面我们学习过怎么样限制替换的次数,如果我们想知道正则表达式里匹配成功之后,替换字符串的次数,那么需要怎么办呢?这是一个好问题,这时就需要采用另一个外函数subn()了。这个函数不但输出替换后的内容,还输出替换的次数,例子:

#python 3.6
#
import re
 
bold = re.compile(r'\*{2}(?P<bold_text>.*?)\*{2}')
 
text = 'Make this **cai**.  This **junsheng**.'
 
print('Text:', text)
print('Bold:', bold.subn(r'<b>\g<bold_text></b>', text))

结果输出如下:

Text: Make this **cai**.  This **junsheng**.
Bold: ('Make this <b>cai</b>.  This <b>junsheng</b>.', 2)

转载于:https://www.cnblogs.com/smiler/p/9364022.html

Python基础知识进阶之正则表达式_头歌python正则表达式进阶 match 和 search 是匹配一次 findall 匹配所有。 阅读详情

相关推荐

〖Python语法进阶篇⑩〗- 正则表达式的字符匹配

在上一章节我们对正则表达式有了一个比较宏观的认识,并且知道了正则表达式的主要功能是通过匹配规则来获取或者验证字符串中的数据。要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串。在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配。

易编橙 · 终身成长社群,相遇已是上上签! 4万+

详解Python正则表达式(含丰富案例)

正则表达式在网络爬虫、数据分析中有着广泛使用,掌握正则表达式能够达到事半功倍的效果。本文详细介绍正则表达式中各种规则及其符号含义,并结合Python中的Re库进行演示,由浅入深,即学即练即用,内容丰富,非常适合初学者。

手把手教你学编程 1万+

〖Python语法进阶篇⑫〗- 正则表达式的综合小练习

前面我们学习了正则表达式的基本用法、字符匹配、量词与组的概念,接下来就做一个综合性的练习吧。把之前学到的知识点全部过一遍,加深对正则的理解。吐槽一句 ---> 说实话,正则的这玩意儿,基本上属于学完就忘,用的时候还得学系列...

易编橙 · 终身成长社群,相遇已是上上签! 4万+

Python正则表达式例子讲解

因为字符串处理无所不在,正则毫无疑问是最简洁和高效的处理方法。今天我们要来一起梳理的知识点就是Python正则表达式。本文将用十个Python正则表达式的例子,帮助初学者入门Python正则表达式,下面一起来看看吧~

Python栈 1195

〖Python语法进阶篇⑨〗 - 初探正则

该章节开始,我们将进入正则表达式阶段的学习。这又是一个新的名词,之前尚未接触过,其实正则表达式也是对于字符串的处理,之前关于字符串数据类型的章节之所以没有介绍正则表达式。原因是因为我们需要学习包、模块、函数的调用等才可以使用正则表达式。现在我们已经具备了这些基础,可以开启正则表达式的正式学习了。接下看看这一章节要学习的内容,该章节没有太多的代码学习,而是通过宽泛的方式了解什么正则表达式以及它的使用方法。

易编橙 · 终身成长社群,相遇已是上上签! 4万+

新手必看!Stata工具变量分析中的三大陷阱:如何正确解读LM统计量、CDW检验和Hansen J值

本文深度解析Stata工具变量分析中的三大核心检验:不可识别检验、弱IV检验和过度识别检验,帮助新手避开常见陷阱。详细解读LM统计量、CDW检验和Hansen J值的正确使用方法,提供实战案例和Stata操作指南,确保研究结论的可靠性。

weixin_29231027的博客 571

python详解(9)——进阶(3):正则表达式,这一篇就够了!

正则表达式的讲解

C_ygxb的博客 1092

MINI PCIE接口设计要点:

3.3Vaux(5pins):3.3V电源。PERST#信号通过外接复位电路,可实现模块复位。模块可以通过硬件方式或软件方式关闭射频通信(不包括 GNSS)。LED_WWAN#:(O)漏极开漏,低有效。:(I)低激活系统禁止射频信号(飞行模式),因此需加上拉。UIM_PWR (1 pin):(O)UIM的电源输出。SMB_DATA:SMBus2.0数据信号线。UIM_VPP:(O)A类设备的可变电源电压。SMB_CLK:SMBus2.0时钟信号线。UIM_RESET:(O)UIM的复位信号。

qq_40010777的博客 8238

学会Python正则表达式,就看这20个例子(脚本之家修正版)

正则表达式是处理字符串的强大工具。作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别。 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正

Superxgl的专栏 3597

西门子博图TIA Portal V18实战:用LAD梯形图快速上手一个电机启停控制程序

本文详细介绍了如何在西门子博图TIA Portal V18中使用LAD梯形图快速实现电机启停控制程序。从项目创建、硬件组态到LAD编程和仿真调试,逐步引导读者掌握PLC编程的核心逻辑,特别适合工业自动化领域的初学者快速上手。

weixin_30617737的博客 689

别再只改config了!YOLO/RT-DETR多通道输入实战:数据集结构、多卡训练与参数优先级避坑指南

本文详细解析了YOLO/RT-DETR模型在多通道输入(如8通道多光谱图像)中的实战应用,涵盖数据集结构优化、数据加载器改造、模型参数调优及多卡训练配置。针对常见的多通道输入报错问题,提供了系统的解决方案和性能优化技巧,帮助开发者高效实现非标准数据格式的适配与训练。

weixin_30955617的博客 397

Python 进阶 — 正则表达式篇

文章目录正则表达式语法 —— Python特殊字符定位符重复修饰符(限定符)扩展标记法`\`+普通字符re 模块函数匹配一项match() 函数search() 函数fullmatch() 函数匹配多项finall()finditer()split() 正则分割替换excape() 转义函数purge() 清除正则表达式缓存RegexFlag 标志常量正则对象 Pattern正则对象方法正则对象属性匹配对象匹配对象方法 正则表达式语法 —— Python 正则表达式是一个特殊的字符序列,能方便地检查一个字

qq_22182345的博客 731

学术报告系列(二) - 智能自主作业机器人感知与控制技术及发展趋势

收集整理于2022年模式识别高峰论坛湖南大学王耀南院士报告(报名题目:智能自主作业机器人感知与控制技术及发展趋势)

Make something people want. 4696

python进阶——正则表达式

python进阶——正则表达式

wtylcam的博客 612

jira bug 仪表盘

背景: 更直观管理bug,方便项目组内人员,创建、修改、关闭bug 使用的场景: 筛选器结果:可用来展示open、什么级别open的问题,方便督促开发快速解决问题 2维筛选器统计:统计经办人下bug状态是open,具体什么等级的数量。有利于开发可以调整工作进度 问题统计: 统计某版本,产出对应等级的bug数量,用于后期测试报告的编写 饼图:直观展示筛选人员的bug,例如想要看出每位测试人员产出bug比例 创建与解决的问题对比图: ...

chuanying_xiaoqi的博客 814

uniapp - 实现手机端H5网页直播功能效果,拿到后端推流地址或播放资源后进行前端的流畅播放和画面展示功能,uniapp实时推流/拉流直播系统详细教程(提供完整示例代码,一键复制开箱即用!)

uniapp,h5网页,手机端H5网页,uniapp h5直播功能页面,uniapp直播实时推送显示,uniapp h5直播怎么做,怎么使用uniapp去实现移动端手机H5直播,h5 vue+uniapp怎么做直播,uniapp中使用videojs构建H5直播播放器,uniappH5端怎么实现直播推流,uniapp如何实现直播,直播聊天功能,h5平台端直播用什么插件,uniapp手机网页直播用什么组件插件播放器,uniapp手机H5直播播放器详细教程,直播项目,怎么使用vue+uniapp怎么做H5实时直播

✅ 精选推荐文章 8792

【python进阶 笔记】正则表达式

【python高级基础 笔记】正则表达式 目录 1.re模块 2.匹配单个字符 3.匹配多个字符 4.匹配开头结尾 4.1. 实例判断变量名是否符合要求 4.2实例 匹配邮箱地址 5.匹配分组 5.1.|实例:匹配出0-100之间的数字。 5.2. ( )实例: 5.3.\实例 5.4.(?P)(?P=name)实例 6. re高级...

在下能猫 的博客 633

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3854

Python正则表达式入门与进阶

Python正则表达式摘要:本文介绍了Python正则表达式的基础和进阶用法。基础部分涵盖re模块的核心函数(match/search/findall/sub等)、常见匹配模式(字符/数字/边界/重复)、分组捕获和实际应用示例(邮箱验证/文本替换)。进阶内容包括贪婪与非贪婪匹配、前瞻后瞻断言、命名分组、预编译优化等技巧,以及跨行匹配、密码强度验证等实用案例。文章强调正则表达式虽强大但复杂,建议结合实践和调试工具逐步掌握,并注意性能优化。

weixin_46060074的博客 831

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python进阶-正则

正则进阶

weixin_53909748的博客 179

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Python零基础到进阶】正则表达式

【Python零基础到进阶】正则表达式

m0_75067629的博客 853

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python 正则表达式进阶用法:量词与范围

匹配前面的字符零次或多次,相当于“任意多次”。:匹配前面的字符一次或多次,相当于“至少一次”。?:匹配前面的字符零次或一次,相当于“可有可无”。{n}:匹配前面的字符n次。{n,}:匹配前面的字符至少n次。{n, m}:匹配前面的字符n到m次。掌握 Python 正则表达式中的量词和范围,可以灵活处理文本中的多种匹配需求。从基本的字符匹配到复杂的文本解析,量词和范围为正则表达式提供了强大的扩展能力。通过量词控制字符出现的次数,使用范围指定匹配字符集合,我们可以轻松实现文本分析和数据提取等任务。

chusheng1840的博客 1555

Python 正则表达式进阶用法:边界匹配

边界匹配是指通过正则表达式的边界符号来匹配字符串中的特定位置,而不是字符本身。\b:单词边界,匹配单词的开头或结尾。\B:非单词边界,匹配不是单词边界的位置。:匹配字符串的开始位置。:匹配字符串的结束位置。通过使用这些边界匹配符,我们可以实现更加精确的匹配,从而避免匹配到不需要的字符或位置。边界匹配是 Python 正则表达式中非常有用的一种技巧。它允许我们精确地控制匹配的范围,避免匹配到不需要的部分。通过使用\b\B和,我们可以在不同的场景中应用正则表达式进行更细粒度的文本处理。\b。

chusheng1840的博客 1667

Python 正则表达式进阶用法:分组与引用详解

本文介绍了 Python 正则表达式中分组与引用的进阶用法。捕获组与非捕获组:捕获组用于提取内容,非捕获组仅匹配而不提取。2.反向引用:在正则表达式中重新引用之前的分组,用于查找重复内容。3.命名分组:为分组设置名称,提高代码可读性。4.替换操作:通过分组进行数据替换,实现灵活的数据清洗。正则表达式的分组与引用虽然复杂,但却非常强大。只要掌握了这些概念,您将能够编写更具适应性的正则表达式来应对复杂的文本处理任务。

chusheng1840的博客 1930

【21天Python进阶学习挑战赛】[day1]正则表达式大总结

一气道盟王富贵儿是也(停止中二)。一个在优快云写划水日记、减肥打卡、罗翔读书笔记的神奇生物。双非理工院校CS专业菜狗一只,本科毕业后在养老型公司划水三年啦(有点出息,求你)。莫得感情的工具人·java开发。一切大佬会的我都不会,大佬不会的,我更不会。但是,人活着总要有点幻想,总觉得这条路走不通换条路或许就好了,所以来学python了.........

一气道盟王富贵儿 499

【python学习】正则表达式进阶

python正则表达式进阶 前言 在写学习完了正则表达式的入门内容之后,正则表达式的进阶内容今天也一并学习掉吧! 1、分组 1.分组 在正则表达式中还提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。 要实现分组很简单,使用()即可。 分组有一个非常重要的功能——捕获数据。所以()被称为捕获分组,用来捕获数据,当我们想要从匹配好的数据中提取关键数据的时候可以使用分组。 2.提取p标签中的数据 <p>(.*)</p> 3.提取学号 (\d{

woodwhale的博客 4088
上一篇: vscode 输出乱码
下一篇: 批处理递归删除指定后缀的文件
dddp75921
博客等级 码龄12年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值