Python/python regex

来自菜鸟教程
跳转至:导航、​搜索

<languages />

Python正则表达式

RegEx或正则表达式是形成搜索模式的一系列字符。

RegEx可用于检查字符串是否包含指定的搜索模式。

正则表达式模块

Python有一个称为的内置程序包 re ,可用于正则表达式。

导入 re 模块:

import re

Python中的RegEx

导入后 re 模块,您可以开始使用正则表达式:

搜索字符串以查看它是否以“ The”开头并以“ Spain”结尾:

    import 
    re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

正则表达式功能

The re 模块提供了一组函数,使我们可以在字符串中搜索匹配项:

功能 描述
找到所有 返回包含所有匹配项的列表
搜索 返回一个

匹配对象

如果字符串中的任何地方都有匹配项

分裂 返回一个列表,该字符串在每次匹配时均已拆分
sub 用字符串替换一个或多个匹配项

元字符

元字符是具有特殊含义的字符:

字符 描述 试试吧
[] 一组字符 “[上午]” 试试吧 ”
\ 发出特殊序列的信号(也可以用于转义特殊字符) “ \ d” 试试吧 ”
. 任何字符(换行符除外) “他..o” 试试吧 ”
^ 以。。开始 “ ^你好” 试试吧 ”
$ 以。。结束 “ world $” 试试吧 ”
* 零次或更多次 “ aix *” 试试吧 ”
+ 一个或多个事件 “ aix +” 试试吧 ”
{} 确切指定的出现次数 “ al {2}” 试试吧 ”
两者任一 停留” 试试吧 ”
() 捕获并分组

特殊序列

一个特殊的顺序是 \ 后跟以下列表中的字符之一,并具有特殊含义:

字符 描述 试试吧
\A 如果指定的字符在字符串的开头,则返回匹配项 “ \ AThe” 试试吧 ”
\b 返回一个匹配项,其中指定字符在单词的开头或结尾

(开头的“ r”是确保该字符串被视为“原始字符串”)

r“ \ bain”

r“ ain \ b”

试试吧 ”

试试吧 ”

\B 返回存在指定字符的匹配项,但不在单词的开头(或结尾)

(开头的“ r”是确保该字符串被视为“原始字符串”)

r“ \ Bain”

r“ ain \ B”

试试吧 ”

试试吧 ”

\d 返回字符串包含数字(0到9之间的数字)的匹配项 “ \ d” 试试吧 ”
\D 返回字符串不包含数字的匹配项 “ \ D” 试试吧 ”
\s 返回字符串包含空格字符的匹配项 “ \ s” 试试吧 ”
\S 返回字符串不包含空格字符的匹配项 “ \ S” 试试吧 ”
\w 返回一个匹配项,该字符串包含任何单词字符(从a到Z的字符,0-9的数字和下划线_字符) “ \ w” 试试吧 ”
\W 返回一个匹配项,其中字符串不包含任何单词字符 “ \ W” 试试吧 ”
\Z 如果指定的字符位于字符串的末尾,则返回匹配项 “西班牙\ Z” 试试吧 ”

Sets

一组是一对方括号内的一组字符 [] 具有特殊含义:

Set 描述 试试吧
[arn] 返回一个匹配项,其中指定字符之一(

a , r , or n ) 存在

试试吧 ”
[一个] 返回任何小写字符的匹配项,按字母顺序

a and n

试试吧 ”
[^ arn] 返回除“”以外的任何字符的匹配项

a , r ,和 n

试试吧 ”
[0123] 返回匹配项,其中任何指定数字(

0 , 1 , 2 , or 3 ) 存在

试试吧 ”
[0-9] 返回之间的任何数字匹配

0 and 9

试试吧 ”
[0-5] [0-9] 返回来自的任何两位数字的匹配项

00 and 59

试试吧 ”
[a-zA-Z] 返回字母之间的任意字符的匹配项

a and z ,小写或大写

试试吧 ”
[+] 在集合中

+ , * , . , | , () , $ , {} 没有特殊的意义,所以 [+] 表示:返回任何一个匹配项 + 字符串中的字符

试试吧 ”

findall()函数

The findall() 函数返回包含所有匹配项的列表。

打印所有匹配项的列表:

  import re

txt = "The rain in Spain"
x = re.findall("ai", 
  txt)

  print(x)

列表按找到顺序包含匹配项。

如果找不到匹配项,则返回一个空列表:

如果找不到匹配项,则返回一个空列表:

  import re

txt = "The rain in Spain"
x = re.findall("Portugal", 
  txt)

  print(x)

search()函数

The search() 函数在字符串中搜索匹配项,然后返回 匹配对象

如果有比赛。

如果有多个匹配项,则仅返回匹配项的第一个匹配项:

搜索字符串中的第一个空格字符:

  import re

txt = "The rain in Spain"
x = re.search("\s", 
  txt)


print("The first white-space character is located in 
  position:", x.start()) 

如果没有找到匹配的值 None 返回:

进行搜索,返回不匹配的内容:

  import re

txt = "The rain in Spain"
x = re.search("Portugal", 
  txt)

  print(x)

split()函数

The split() 函数返回一个列表,其中每个匹配项都已将字符串分割开:

在每个空格字符处分割:

  import re

txt = "The rain in Spain"
x = re.split("\s", 
  txt)

  print(x)

您可以通过指定 maxsplit 参数:

仅在第一次出现时才拆分字符串:

  import re

txt = "The rain in Spain"
x = re.split("\s", 
  txt, 
  1)

  print(x)

sub()函数

The sub() 函数将匹配项替换为您选择的文本:

将每个空白字符替换为数字9:

  import re

txt = "The rain in Spain"
x = re.sub("\s", 
  "9", txt)

  print(x)

您可以通过指定 count 参数:

替换前两个事件:

  import re

txt = "The rain in Spain"
x = re.sub("\s", 
  "9", txt, 2)

  print(x)

匹配对象

匹配对象是包含有关搜索和结果信息的对象。

注意: 如果不匹配,则该值 None 将返回,而不是Match对象。


进行搜索以返回匹配对象:

  import re

txt = "The rain in Spain"
x = re.search("ai", 
  txt)

  print(x) #this will print an object

Match对象具有用于检索有关搜索信息和结果的属性和方法:

.span() 返回一个元组,其中包含匹配的开始和结束位置。
.string 返回传递给函数的字符串
.group() 返回匹配的字符串部分


打印第一个匹配项的位置(开始和结束位置)。

正则表达式查找以大写字母“ S”开头的所有单词:

    import re


    txt = "The rain in Spain"

    x = re.search(r"\bS\w+", txt)

    print(x.span())

打印传递给函数的字符串:

    import re


    txt = "The rain in Spain"

    x = re.search(r"\bS\w+", txt)

    print(x.string)

打印匹配的字符串部分。

正则表达式查找以大写字母“ S”开头的所有单词:

    import re


    txt = "The rain in Spain"

    x = re.search(r"\bS\w+", txt)

    print(x.group())

注意: 如果不匹配,则该值 None 将返回,而不是Match对象。