正则表达式总结-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 结尾,$ 为匹配输入字符串的结束位置。 正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符

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

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

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

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 命令中

[转帖]正则表达式及在Jmeter中的应用

目录 1.正则表达式 1.1 什么是正则表达式 1.2 为什么使用正则表达式 2.语法 2.1 普通字符 2.2 限定符 2.3 非打印字符 2.4 特殊字符 2.5 定位符 2.6 修饰符(标记) 2.7 选择 2.8 运算符优先级 3.常用正则表达式及在线工具 4.Jmeter之正则表达式提取器

JavaScript之正则表达式

正则表达式(RegExp) 正则表达式不是JS独有的内容,大部分语言都支持正则表达式 JS中正则表达式使用得不是那么多,我们可以尽量避免使用正则表达式 在JS中,正则表达式就是RegExp对象,RegExp 对象用于将文本与一个模式匹配 正则表达式(regular expressions, 规则表达

学习正则表达式

正则表达式是一个强大的文本匹配工具。但是,对于初学者来说,众多的符号和规则可能让人难以理解。其实,你不需要记住所有的正则表达式语法!本文将分享一些简单而实用的技巧,帮助理解正则表达式的核心概念,轻松使用正则表达式! 基础入门 概念 正则表达式(Regular Expression,在代码中常简写为r