목차
정규식 개요
. 줄 바꿈을 제외한 모든 단일 문자와 일치시키려는 것을 나타냅니다.
* - 의미 match 이전 하위 표현식은 0번을 포함하여 원하는 횟수만큼 가능합니다. 예를 들어 쉼표 자체를 포함하여 다음 텍스트의 각 줄에서 쉼표 뒤의 문자열 내용을 선택하려고 합니다. 여기서 쉼표는 텍스트 쉼표입니다.
예를 들어 위 예에서는 쉼표 자체를 포함하여 텍스트의 각 줄 뒤에 있는 문자열을 선택하려고 합니다. 단, 조건을 추가하세요. 쉼표 뒤에 내용이 없으면 선택하지 마세요.
예를 들어 다음 텍스트
6、方括号-匹配几个字符之一
7、起始位置和单行、多行模式
8、括号-组选择
9、反斜杠-对元字符的转义
10、修饰符-可选标志
11、使用正则表达式切割字符串
백엔드 개발 파이썬 튜토리얼 Python 정규식의 일반적인 문법 예 분석

Python 정규식의 일반적인 문법 예 분석

May 12, 2023 am 09:04 AM
python

정규식 개요

정규식은 문자열이 특정 패턴과 일치하는지 쉽게 확인하는 데 도움이 되는 특수 문자 시퀀스입니다. Python은 버전 1.5부터 Perl 스타일 정규식 패턴을 제공하는 re 모듈을 추가했습니다. re 모듈은 Python 언어에 완전한 정규식 기능을 제공합니다. 정규식은 강력한 문자 처리 도구입니다. 그 본질은 문자열이 우리가 정의한 문자 시퀀스의 특정 패턴과 일치하는지 쉽게 확인할 수 있는 문자 시퀀스입니다. Python에서는 정규식을 모듈 사용으로 가져올 수 있습니다.

정규식에 쓰여진 일반 문자는 모두 직접 일치를 의미합니다.

하지만 메타문자(메타문자)라는 용어가 있습니다. 이들은 정규식 문자열에 나타나며 직접적으로 일치시키는 것이 아니라 몇 가지 특별한 의미를 표현하기 위해 사용됩니다.

이러한 특수 메타 문자에는 다음이 포함됩니다.

. * + ? [ ] ^ $ { } | ( ) 각각의 의미를 소개하겠습니다.

1. 모든 문자에 점 일치

. 줄 바꿈을 제외한 모든 단일 문자와 일치시키려는 것을 나타냅니다.

예를 들어 아래 텍스트에서 모든 색상을 선택하려고 합니다.

Apples are green
Oranges is orange

Banana is yellow
Crows are black

즉, color로 끝나고 이전 문자를 포함하는 모든 단어를 찾습니다. 다음과 같이 정규 표현식을 작성할 수도 있습니다.

색상의 점은 모든 문자를 나타냅니다.

. 색상 조합은 단어 color와 두 단어의 문자열이 결합된 문자를 찾는 것을 의미합니다.

예:

# 导入re模块
import re
#输入文本内容
content='''苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的'''
p=re.compile(r'.色')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석2. 별표 - 여러 번 일치를 반복합니다.

* - 의미 match 이전 하위 표현식은 0번을 포함하여 원하는 횟수만큼 가능합니다. 예를 들어 쉼표 자체를 포함하여 다음 텍스트의 각 줄에서 쉼표 뒤의 문자열 내용을 선택하려고 합니다. 여기서 쉼표는 텍스트 쉼표입니다.

Apple is green

Orange is orange

Banana is yellow
Crow is black

Monkey,


정규 표현식은 다음과 같이 작성할 수 있습니다.

예:
# 导入re模块
import re
#输入文本内容
content='''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''
p=re.compile(r',.*')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)
로그인 후 복사

이런 방식으로 쉼표를 포함한 모든 후속 문자열이 일치됩니다

Python 정규식의 일반적인 문법 예 분석3. 더하기 기호 - 일치를 여러 번 반복합니다

+는 이전 하위 표현식과 0번을 제외하고 한 번 이상 일치함을 의미합니다

예를 들어 위 예에서는 쉼표 자체를 포함하여 텍스트의 각 줄 뒤에 있는 문자열을 선택하려고 합니다. 단, 조건을 추가하세요. 쉼표 뒤에 내용이 없으면 선택하지 마세요.

아래 텍스트 마지막 줄에 쉼표 다음 내용이 없으므로 선택하지 마세요

Apple is green

Orange is orange

Banana is yellow
Crow is black

Monkey


그냥 쓰셔도 됩니다 .+

예:
# 导入re模块
import re
#输入文本内容
content='''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''
p=re.compile(r',.+')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)
로그인 후 복사

이렇게 하면 마지막 줄의 쉼표 뒤에 내용이 없으므로 마지막 줄이 일치하지 않습니다.

Python 정규식의 일반적인 문법 예 분석4. 지정된 횟수

중괄호는 이전 문자가 지정된 횟수와 일치합니다

예를 들어 다음 텍스트

red, green, black, green, oily

표현 oil {3,4} 연속된 기름 문자가 최소 3번, 최대 4번 일치함을 의미합니다

예:
# 导入re模块
import re
#输入文本内容
content='''红彤彤,绿油油,黑乎乎,绿油油油油'''
p=re.compile(r'绿油{3,4}')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)
로그인 후 복사

여기 녹색 다음에 기름이 최소 3번, 최대 4번 일치하는 문자열이 있습니다

Python 정규식의 일반적인 문법 예 분석5. -greedy 모드와 non-greedy 모드

다음 문자열이 필요합니다. 이러한 목록을 얻으려면

에서 모든 html 태그를 추출하세요

Python 정규식의 일반적인 문법 예 분석

정규식 <을 사용하면 생각하기 쉽습니다. *>

Python 정규식의 일반적인 문법 예 분석 다음 코드를 작성하면

# 导入re模块
import re
#输入文本内容
source=&#39;<html><head><title>Title</title>&#39;
p=re.compile(r&#39;<.*>&#39;)#r表示不要进行python语法中对字符串的转译
print(p.findall(source))
로그인 후 복사

하지만 실행 결과는 전체 문자열이 일치합니다

무슨 일이 일어난 걸까요? 정규식에서는 '*', '+', '?'를 사용하면 가능한 한 많은 내용을 일치시키므로 <.*> (반복 횟수를 나타냄)은 문자열의 마지막 도 일치하는 패턴과 일치할 때까지 일치합니다.

为了解决整个问题,就需要使用非贪婪模式,也就是在星号后面加上?,变成这样<.*?>

代码改为

# 导入re模块
import re
#输入文本内容
source=&#39;<html><head><title>Title</title>&#39;
p=re.compile(r&#39;<.*?>&#39;)#r表示不要进行python语法中对字符串的转译
print(p.findall(source))
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석

这样就单独去匹配出来了每一个标签

6、方括号-匹配几个字符之一

方括号表示要匹配某几种类型字符。

比如

[abc]可以匹配a,b,c里面的任意一个字符。等价于[a-c]

a-c中间的-表示一个范围从a到c

如果你想匹配所有小写字母,可以使用[a-z]

一些元字符在方括号内便失去了魔法,变得和普通字符一样了。

比如

[akm.]匹配a k m .里面的任意一个字符

在这里. 在括号不再表示匹配任意字符了,而就是表示匹配.这个字符

例如:

实例描述
[pP]ython匹配“Python”或者“python”
rub[ye]匹配“ruby”或者“rube”

7、起始位置和单行、多行模式

^表示匹配文本的起始位置

正则表达式可以设定单行模式和多行模式

如果是单行模式,表示匹配整个文本的开头位置。

如果是多行模式,表示匹配文本每行的开头位置。

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,

范例:

# 导入re模块
import re
#输入文本内容
source=&#39;&#39;&#39;001-苹果-60
002-橙子-70
003-香蕉-80&#39;&#39;&#39;
p=re.compile(r&#39;^\d+&#39;)#r表示不要进行python语法中对字符串的转译
for one in p.findall(source):
    print(one)
로그인 후 복사

运行结果如下

Python 정규식의 일반적인 문법 예 분석

如果去掉complie的第二个参数re.M,运行结果如下

Python 정규식의 일반적인 문법 예 분석

就只进行一行匹配,

因为在单行模式下,^只会匹配整个文本的开头位置

$表示匹配文本的结束位置

如果是单行模式,表示匹配整个文本的结束位置。

如果是多行模式,表示匹配文本每行的结束位置。

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,

如果我们要提取所有的水果编号,用这样的正则表达式\d+$

范例:

# 导入re模块
import re
#输入文本内容
source=&#39;&#39;&#39;001-苹果-60
002-橙子-70
003-香蕉-80&#39;&#39;&#39;
p=re.compile(r&#39;^\d+$&#39;,re.M)#re.M进行多行匹配
for one in p.findall(source):
    print(one)
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석

成功匹配到每行最后的价格

8、括号-组选择

主括号称之为正则表达式的组选择。是从正则表达式匹配的内容里面扣取出其中的某些部分

前面,我们有个例子,从下面的文本中,选择每行逗号前面的字符串,也包括逗号本身。

苹果,苹果是绿色的
橙子,橙子是橙色的
香蕉,香蕉是黄色的

就可以这样写正则表达式个^.*,。

但是,如果我们要求不要包括逗号呢?

当然不能直接这样写^.*

因为最后的逗号是特征所在,如果去掉它,就没法找逗号前面的了。

但是把逗号放在正则表达式中,又会包含逗号。

解决问题的方法就是使用组选择符:括号。

我们这样写^(.*),

我们把要从整个表达式中提取的部分放在括号中,这样水果的名字就被单独的放在组group中了。

对应的Python代码如下

# 导入re模块
import re
#输入文本内容
source=&#39;&#39;&#39;苹果,苹果是绿色的
橙子,橙子是橙色的
香蕉,香蕉是黄色的&#39;&#39;&#39;
p=re.compile(r&#39;^(.*),&#39;,re.M)#re.M进行多行匹配
for one in p.findall(source):
    print(one)
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석

这样我们就可以把,前的字符取出来了

9、反斜杠-对元字符的转义

反斜杠\在正则表达式中有多种用途

比如,我们要在下面的文本中搜索所有点前面的字符串,也包括点本身

苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的

如果,我们这样写正则表达式.*.,聪明的你肯定发现不对劲。

因为点是一个元字符,直接出现在正则表达式中,表示匹配任意的单个字符,不能表示.这个字符的本身的意思了

怎么办呢?

如果我们要搜索的内容本身就包含元字符,就可以使用反斜杠进行转义

这里我们就应用这样的表达式.*\.

范例:

# 导入re模块
import re
#输入文本内容
source=&#39;&#39;&#39;苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的&#39;&#39;&#39;
p=re.compile(r&#39;.*\.&#39;)#r表示不要进行python语法中对字符串的转译
for one in p.findall(source):
    print(one)
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석

成功匹配!

利用反斜杠还可以匹配某种字符类型

反斜杠后面接一些字符,表示匹配某种类型的一个字符

字符功能
\d匹配0~9之间的任意一个数字字符,等价于表达式[0-9]
\D匹配任意一个不上0-9之间的数字字符,等价于表达是[^0-9]
\s匹配任意一个空白字符,包括空格、tab、换行符等、等价于[\t\n\r\f\v]
\S匹配任意一个非空白字符,等价于[^\t\tn\r\f\v]
\w匹配任意一个文字字符,包括大小写、数字、下划线、等于[a-zA-A0-9]
\W匹配任意一个非文字字符,等价于表达式[^a-zA-Z0-9]

反斜杠也可以用在方括号里面,比如[\s,.]:表示匹配任何空白字符,或者逗号,或者点

10、修饰符-可选标志

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位OR(I)它们来指定。如re.l | re.M被设置成Ⅰ和M标志:

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响^和$
re.S使匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响lw,W,Nb,\B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

11、使用正则表达式切割字符串

字符串对象的split()方法只适应于非常简单的字符串分割情形。当你需要更加灵活的切割字符串的时候,就不好用了。

比如,我们需要从下面字符串中提取武将的名字。

我们发现这些名字之间,有的是分号隔开,有的是逗号隔开,有的是空格隔开,而且分割符号周围还有不定数量的空格

names =“关羽;张飞,赵云,马超,黄忠 李逵”

这时,最好使用正则表达式里面的split方法:

范例:

# 导入re模块
import re
#输入文本内容
names ="关羽;张飞,赵云,马超,黄忠  李逵"
namelist=re.split(r&#39;[;,\s]\s*&#39;,names)
print(namelist)
로그인 후 복사

Python 정규식의 일반적인 문법 예 분석

正则表达式[;,ls]\s*指定了,分割符为分号、逗号、空格里面的任意一种均可,并且该符号周围可以有不定数量的空格。

위 내용은 Python 정규식의 일반적인 문법 예 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python 중에서 선택 : 가이드 PHP와 Python 중에서 선택 : 가이드 Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP와 Python : 그들의 역사에 깊은 다이빙 PHP와 Python : 그들의 역사에 깊은 다이빙 Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

Python vs. JavaScript : 학습 곡선 및 사용 편의성 Python vs. JavaScript : 학습 곡선 및 사용 편의성 Apr 16, 2025 am 12:12 AM

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

숭고한 코드 파이썬을 실행하는 방법 숭고한 코드 파이썬을 실행하는 방법 Apr 16, 2025 am 08:48 AM

Sublime 텍스트로 Python 코드를 실행하려면 먼저 Python 플러그인을 설치 한 다음 .py 파일을 작성하고 코드를 작성한 다음 CTRL B를 눌러 코드를 실행하면 콘솔에 출력이 표시됩니다.

Golang vs. Python : 성능 및 확장 성 Golang vs. Python : 성능 및 확장 성 Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

vscode에서 코드를 작성하는 위치 vscode에서 코드를 작성하는 위치 Apr 15, 2025 pm 09:54 PM

Visual Studio Code (VSCODE)에서 코드를 작성하는 것은 간단하고 사용하기 쉽습니다. vscode를 설치하고, 프로젝트를 만들고, 언어를 선택하고, 파일을 만들고, 코드를 작성하고, 저장하고 실행합니다. VSCODE의 장점에는 크로스 플랫폼, 무료 및 오픈 소스, 강력한 기능, 풍부한 확장 및 경량 및 빠른가 포함됩니다.

메모장으로 파이썬을 실행하는 방법 메모장으로 파이썬을 실행하는 방법 Apr 16, 2025 pm 07:33 PM

메모장에서 Python 코드를 실행하려면 Python 실행 파일 및 NPPEXEC 플러그인을 설치해야합니다. Python을 설치하고 경로를 추가 한 후 nppexec 플러그인의 명령 "Python"및 매개 변수 "{current_directory} {file_name}"을 구성하여 Notepad의 단축키 "F6"을 통해 Python 코드를 실행하십시오.

See all articles