正则表达式总结-1

正则表达式,总结 · 浏览次数 : 9

小编点评

```python import re values = \"\"\"[13:52:44]<fruits>[13:52:44]apple : 11111 mv[13:52:44]banana : 22222 mv[13:52:44]vol : 10327 mv[13:52:44]<batterry>[13:52:44]vol : 10327 mv[13:52:44]cur : 4344 ma[13:52:44]cap : 25 %[13:52:44]tpwr : 44.86 w[13:52:44]<motor>[13:52:44]bird : 999999 w [13:52:44]monkey : 888888[13:52:44]tpwr : 44.86 w[13:52:44]<animals> \"\"\ #定义匹配策略\"\\s\" 匹配空白字符\"\\d\" 匹配数字字符\".\" 匹配任意字符\"*\" 匹配0个或多个字符\"\" 转义,匹配特殊字符\"()\" 将所需要的数据单独匹配出来 for key in data: volValue = re.findall(\"\\[(.*)\\]({})\\s*:\\s*(\\d*)\".format(\"cap\"), key) print(volValue) ``` **输出结果:** ``` ['13:52:44', 'cap', '25'] ```

正文

转载

正则表达式是一种强大的文本处理工具,它允许你根据一定的规则来搜索、匹配、替换和验证文本,适配各种编程语言。

应用场景

正则表达式在计算机领域有广泛的应用,包括:

1、文本搜索和匹配:查找特定模式的字符串,如搜索包含特定关键词的文档。

2、数据验证:验证用户输入的数据是否符合特定格式,如电子邮件地址、电话号码、日期等。

3、数据提取:从文本中提取特定信息,如从HTML页面中提取链接或从日志文件中提取关键信息。

4、字符串替换:将文本中的特定模式替换为其他内容,如过滤敏感词汇。

5、日志分析:分析日志文件以提取有用的信息,如统计访问量或检测异常事件。

6、编译原理:在编译器和解释器中用于词法分析和语法分析。

7、网络爬虫:用于网页内容的抓取和处理。

元字符

常见元字符:

.:匹配任意字符,除了换行符。
例如,正则表达式 a.b 可以匹配 "axb"、"aab"、"a1b" 等。

*:匹配【前一个字符】零次或多次。
例如,正则表达式 ca*t 可以匹配 "ct"、"cat"、"caat" 等。

+:匹配【前一个字符】一次或多次。
例如,正则表达式 ca+t 可以匹配 "cat"、"caat" 等,但不匹配 "ct"。

?:匹配【前一个字符】零次或一次。
例如,正则表达式 colou?r 可以匹配 "color" 和 "colour"。

|:表示“或”操作,匹配两个或多个模式中的任何一个。
例如,正则表达式 apple|banana 可以匹配 "apple" 或 "banana"。

[]:定义字符类,匹配括号内的任何字符。
例如,正则表达式 [aeiou] 可以匹配任何元音字母。

():表示分组,用于捕获匹配的文本。
例如,正则表达式 (\d{3})-(\d{2}) 可以匹配 "123-45" 并捕获 "123" 和 "45"。

字符类

字符类用于匹配某一类字符,常见字符类:

[0-9]:匹配任何数字。
[a-z]:匹配小写字母。
[A-Z]:匹配大写字母。
[a-zA-Z]:匹配任何字母。
[^0-9]:匹配除了数字以外的字符。
[aeiou]:匹配任何元音字母。

数量词

数量词用于指定模式中字符的重复次数,常见数量词:

{n}:匹配【前一个字符】恰好 n 次。
{n,}:匹配【前一个字符】至少 n 次。
{n,m}:匹配【前一个字符】至少 n 次,但不超过 m 次。
*:匹配零次或多次。
+:匹配一次或多次。
?:匹配零次或一次。

边界匹配

边界匹配用于限定匹配模式的位置,常见的边界匹配符号:

^:匹配字符串的开始
$:匹配字符串的结束
\b:匹配单词的边界
\B:匹配非单词边界

组匹配

正则表达式的组匹配允许你将模式中的一部分用括号括起来,以便捕获匹配的内容,这些捕获的内容可以在后续操作中使用。组匹配非常有用,特别是在需要提取或替换特定部分的文本时。

示例一:匹配日期

考虑一个匹配日期的例子,正则表达式为

 (\d{4})-(\d{2})-(\d{2})

这个正则表达式会匹配形如 "2023-05-09" 的日期,并捕获年、月、日三个部分。

"2023-05-09" 匹配整个模式,捕获的结果是:年 = "2023",月 = "05",日 = "09"。

示例二:替换重复单词

正则表达式的组匹配在替换文本中的内容时非常有用。考虑一个需要将文本中的重复单词替换为一次的情况,正则表达式为

\b(\w+)\b\s+\1\b
  • \b(\w+)\b 匹配一个单词,并捕获到组1中。
  • \s+ 匹配一个或多个空白字符。
  • \1\b 匹配与组1相同的单词,并匹配单词边界。

通过这个正则表达式,可以将文本中的 "word word" 替换为 "word"。

反向引用

正则表达式的反向引用是一种强大的技术,允许你在模式中引用已经捕获的文本,并在匹配时使用这些引用。这通常通过组匹配和反向引用组号来实现。反向引用在处理需要重复出现的文本模式时非常有用,例如识别重复单词、标签、括号等。

基本语法

在正则表达式中,反向引用使用组号来指示要引用的组,组号从1开始。组是通过在模式中使用圆括号 () 来创建的。一旦你捕获了一个组,你可以在后续的模式中引用它。引用的语法是 \ 后跟组号,例如 \1 表示引用组1。

示例一:匹配重复单词

假设我们有一段文本,其中有一些单词出现了两次。我们希望使用正则表达式将这些重复的单词识别出来。

文本:"Hello, hello, world, world, example, example."

正则表达式:

 \b(\w+)\b.*\b\1\b
  • \b(\w+)\b:匹配一个单词并捕获到组1中。
  • .*:匹配任意字符(包括空格)零次或多次。
  • \b\1\b:引用组1,确保匹配的是与组1相同的单词,并且单词边界匹配。

使用这个正则表达式,我们可以捕获到重复的单词 "example" 和 "world"。

示例二:HTML标签匹配

假设我们需要从HTML文档中提取所有的链接文本和链接地址。HTML标签是有嵌套关系的,我们可以使用反向引用来处理这种情况。

HTML片段:

<a href="https://www.example1.com">Example 1</a><a href="https://www.example2.com">Example 2</a><a href="https://www.example3.com">Example 3</a>

正则表达式:

<a href="([^"]+)">([^<]+)</a>
  • <a href="([^"]+)">:匹配链接的开头标签,捕获链接地址到组1中。
  • ([^<]+):匹配链接文本,捕获到组2中。
  • :匹配链接的结束标签。
import re

str = '<a href="https://www.example1.com">Example 1</a>' \
      '<a href="https://www.example2.com">Example 2</a>' \
      '<a href="https://www.example3.com">Example 3</a>'

pattent = '<a href="([^"]+)">([^<]+)</a>'

data = re.findall(string=str,pattern=pattent)
print(data)

# 输出
[('https://www.example1.com', 'Example 1'), ('https://www.example2.com', 'Example 2'), ('https://www.example3.com', 'Example 3')]

实战

案例1

转载:Python-正则表达式(给同事培训篇)

  • 问题

对于字符串values,想要提取其中的cap所在的行信息,并输出打印出结果。

import re

values = """
[13:52:44]<fruits>
[13:52:44]apple  : 11111 mv
[13:52:44]banana : 22222 mv
[13:52:44]vol    : 10327 mv
[13:52:44]<batterry>
[13:52:44]vol    : 10327 mv
[13:52:44]cur    : 4344 ma
[13:52:44]cap    : 25 %
[13:52:44]tpwr   : 44.86 w
[13:52:44]<motor>
[13:52:44]bird   : 999999 w 
[13:52:44]monkey : 888888
[13:52:44]tpwr   : 44.86 w
[13:52:44]<animals>
  """
  • 先定位并提取数据
data = re.findall("<batterry>(.*)<motor>", values, re.S) # re.S表示换行也算
print(data)
# 输出
['\n[13:52:44]vol    : 10327 mv\n[13:52:44]cur    : 4344 ma\n[13:52:44]cap    : 25 %\n[13:52:44]tpwr   : 44.86 w\n[13:52:44]']
  • 定义匹配策略
    • "\s" 匹配空白字符
    • "\d" 匹配数字字符
    • "." 匹配任意字符
    • "*" 匹配0个或多个字符
    • "" 转义,匹配特殊字符
    • "()" 将所需要的数据单独匹配出来
for key in data:
    volValue = re.findall("\[(.*)\]({})\s*:\s*(\d*)".format("cap"), key)
    print(volValue)
# 输出
[('13:52:44', 'cap', '25')]
  • 输出
volDict = {}
timeList = []
valueList = []

for value in volValue:
    timeList.append(value[0])
    valueList.append(value[2])

volDict["time"] = timeList
volDict["vol"] = volValue[0][1]
volDict["value"] = valueList
print(volDict)
# 输出
{'time': ['13:52:44'], 'vol': 'cap', 'value': ['25']}

与 正则表达式总结-1相似的内容:

正则表达式总结-1

转载 正则表达式真的很强,可惜你不会写 正则表达式是一种强大的文本处理工具,它允许你根据一定的规则来搜索、匹配、替换和验证文本,适配各种编程语言。 应用场景 正则表达式在计算机领域有广泛的应用,包括: 1、文本搜索和匹配:查找特定模式的字符串,如搜索包含特定关键词的文档。 2、数据验证:验证用户输入

正则表达式知识点总结

第一部分:正则表达式 概念 一个函数: re.findall(pattern, string) 一些元字符: . * ? + [] () \ ^ $ 通过 () 来改变 findall 的行为 例1: 判断一个手机号码(长度、开头数字为1、只能是数字) import re a=12345678901

[转帖]总结:正则表达式

一、重要点整理 ^ 为匹配输入字符串的开始位置。 [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。[^…] 排除型字符组。 abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。 正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符

OOP第二阶段题集总结

一.前言 知识点:考察继承和多态为多,其中还涉及迭代器的使用,在每个题集中都有一个综合性题目设计多方面知识点考试,有List类和HashMap的使用以及正则表达式的运用,并且注重考查设计,理解类与类之间的关系进行合理设计,其中也要遵循我们所学的单一职责,开闭原则,迪米特法则等。 题量:第四次题集和第

[转帖]Linux中的grep -v、-e、-E用法小结

https://www.jb51.net/article/266590.htm grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,这篇文章主要介绍了Linux之grep -v、-e、-E用法总结,需要的朋友可以参考下 + 目录 简介 grep (global sea

正则表达式

正则表达式 import re 限定符(quantifier) a* a出现0次或者多次 a+ a出现1次或者多次 a? a出现0次或者一次 a{6} a出现6次 a{2,6} a出现2-6次 a{2,} a出现两次以上 或运算符(OR Operator) (a|b) 匹配 (ab)|(cd) 匹配

正则表达式中 “$” 并不是表示 “字符串结束

作者:Seth Larson 译者:豌豆花下猫@Python猫 英文:Regex character “$” doesn't mean “end-of-string” 转载请保留作者及译者信息! 这篇文章写一写我最近在用 Python 的正则表达式模块(re)开发 CPython 的 SBOM 工具

[转帖]正则表达式技巧与注意事项

https://www.cnblogs.com/codelogs/p/16060052.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 现如今,正则表达式几乎是程序员的必备技能了,它入手确实很容易,但如果你不仔细琢磨学习,会长期停留在正则最基本的用法

正则表达式学习

第一个: 过滤guid相关的信息 egrep ^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$ 第二个: 反编译代码 time for i in `find . \( -path ./var -

[转帖]正则表达式边玩边学

最近在学习极客时间的《正则表达式入门课》,感觉很适合入门玩,所以简单作一些笔记方便查找参考。 正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中