正则表达式,字符串的搜索与替换

对于常规的print("\\\\")输出只会进行一次转义,即输出结果就是 \\

因为一个\\代表 \
但对于re.search()。其输入的参数会被转化为正则表达式,
re.search("\\\\",)其中的参数被看作"\"正则表达式
re的第一个参数是正则表达式,第二个参数是字符串。

下面给一个为什么要第一个参数是正则表达式,而不是想搜索的字符串

你问为什么 re.search 的第一个参数必须被当作正则表达式来处理,而不是和第二个参数一样被当作普通字符串。

原因在于:re.search 的设计目的就是为了实现"正则表达式"这个功能。

1. 函数的"约定"

每个函数都有它自己的"约定"或"合同"。当程序员调用一个函数时,他们需要遵循这个约定,并传入符合要求的参数。

re.search(pattern, string) 的约定是:

  • pattern (第一个参数): 我(re.search)会把这个参数当成正则表达式模式来处理。

  • string (第二个参数): 我会把这个参数当成普通字符串数据来处理。

如果你不遵循这个约定,函数就无法正常工作。

2. 为什么不能都当作普通字符串?

如果你将两个参数都当作普通字符串,那么 re.search 就失去了它作为"正则表达式引擎"的意义,它就退化成了一个简单的字符串查找函数,和 Python 内置的 string.find()string.index() 一样。

比如,你想用 re.search 找到一个数字 \d。如果它把 \d 当作普通字符串,它就只会去寻找字面量 \d,而永远找不到数字。

3. 命名约定

这也是为什么 re.search 的参数名是 patternstring

  • pattern 这个词本身就暗示它是一个模式。

  • string 则表示它是一个普通的数据字符串。


例子:string.find() vs. re.search()

为了更好地理解这一点,我们来比较一下 Python 内置的两种查找方法:

复制代码
text = "The quick brown fox jumped over 123 dogs."

# 使用普通的字符串查找方法
print(text.find("fox"))  # 输出: 16 (找到'fox'的索引)
print(text.find("\d"))  # 输出: -1 (因为找不到字面量"\d")

# 使用正则表达式查找方法
import re
print(re.search(r"fox", text).group())  # 输出: 'fox'
print(re.search(r"\d", text).group())   # 输出: '1' (找到第一个数字)

在这个例子中,text.find() 只能进行字面量匹配,因为它将两个参数都视为普通字符串。

re.search() 知道它的第一个参数是模式 ,所以它能理解 \d 的特殊含义,并找到数字。

所以,第一个参数被当作正则表达式来解析,是因为这就是 re.search 函数的全部意义所在。

相关推荐
yume_sibai2 天前
正则表达式完全指南(基础语法 + 实战应用 + 性能优化 + 最佳实践)
开发语言·正则表达式·c#
研☆香3 天前
js中使用的正则表达式
开发语言·javascript·正则表达式
2601_962293537 天前
浅学python | 正则表达式集锦
正则表达式·字符串匹配·python知识·浅学python·ip地址检查
2601_962295587 天前
Python中正则表达式的知识汇总分享
python·正则表达式·模块·语法·匹配
启观川8 天前
Python基础-第 16 章 综合案例:客户信息管理系统
开发语言·笔记·python·正则表达式
2601_962294058 天前
Python 操作 Word:如何查找、替换和批量修改文本
python·正则表达式·word·文档处理·查找替换
for_ever_love__12 天前
python基础语法学习: 正则表达式
python·学习·正则表达式
asdfg125896314 天前
一个例子通俗理解Java中正则表达式用法
java·正则表达式
Tanner_SL14 天前
Linux笔记之正则表达式和文本处理grep,sed,awk命令
linux·正则表达式
谢亮_vipxieliang15 天前
手机号验证技术方案:号段规则与正则表达式
java·服务器·spring boot·正则表达式·hibernate