来啦,已经跑了好几圈啦....
Canvas is not supported in your browser.

Python教程‘r’的使用技巧

嗨,大家好!今天,我们将探讨Python中一个重要但经常被忽视的小技巧'r'。

 

在Python中,r是一个前缀,它用于处理原始字符串(raw strings)。原始字符串与普通字符串不同,它们让你在字符串中使用反斜杠符号\而不必担心它们被解释成转义字符。

为什么要使用原始字符串?

原始字符串在处理正则表达式、文件路径、Windows路径等需要使用反斜杠的情况下非常有用。当你使用普通字符串时,例如"C:\User\Documents",Python会将\U解释为一个Unicode转义字符,而不是文件路径的一部分。

但如果你使用原始字符串,像这样:r"C:\User\Documents",Python将字符串视为字面值,不对\进行任何转义。

让我们来看几个实际的例子

1.正则表达式

正则表达式:在正则表达式中,反斜杠\用于转义特殊字符。使用原始字符串,你可以写更简洁的正则表达式,例如:r"\d{3}-\d{6}" 

代码

import re

# 使用普通字符串

pattern = "\\d{3}-\\d{6}" # 匹配格式为"###-######"的电话号码

text = "Local Phone Number: 027-888888"

match = re.search(pattern, text)

print("普通字符串匹配结果:", match.group() if match else "未找到匹配")

# 使用原始字符串

pattern_raw = r"\d{3}-\d{6}" # 匹配格式为"###-######"的电话号码

match_raw = re.search(pattern_raw, text)

print("原始字符串匹配结果:", match_raw.group() if match_raw else "未找到匹配")

输出

普通字符串匹配结果: 027-888888

原始字符串匹配结果: 027-888888

 

  • 由于反斜杠 \ 在普通Python字符串中也是一个转义字符,因此在正则表达式模式中我们需要写成 "\\d" 而不是 "\d"。

然后,我们在文本字符串 text 中搜索这个模式,如果找到匹配,就打印出匹配的结果。

  • 我们使用了原始字符串,即在模式字符串前面加上 r 前缀。这意味着在模式字符串中,反斜杠 \ 不会被解释为转义字符,所以我们只需要写 \d 而不是 "\\d",使模式更加清晰和简洁。

使用原始字符串可以减少错误并提高可读性,尤其是在处理复杂的正则表达式时。所以,当你需要在正则表达式中包含反斜杠时,使用原始字符串是一个不错的选择。

在上述代码示例中,你会看到两次搜索都会找到匹配,因为文本字符串 text 包含了一个某地的电话号码。使用原始字符串使正则表达式模式更加直观和易于理解。

提示

代码"import re" 是用于导入Python的正则表达式库(re)的语句。

如果你想使用正则表达式来进行文本匹配,包括使用re.search() 函数,那么必须导入这个库(re),因为它包含了与正则表达式相关的函数和类。

2.文件路径

文件路径:如果你需要处理文件路径,使用原始字符串可以避免混淆。例如:path = r"C:\User\Documents\file.txt"

代码

# 使用普通字符串

path_normal = "C:\\User\\Documents\\file.txt"

# 使用原始字符串

path_raw = r"C:\User\Documents\file.txt"

print("普通字符串路径:", path_normal)

print("原始字符串路径:", path_raw)

输出

普通字符串路径: C:\User\Documents\file.txt

原始字符串路径: C:\User\Documents\file.txt

 

当编写文件路径时,经常会涉及到反斜杠 \,因为在Windows系统中,路径通常使用反斜杠来分隔文件夹和文件。在Python字符串中,反斜杠 \ 也被用作转义字符,用于表示特殊字符。这可能会导致一些问题,特别是当你需要在字符串中包含反斜杠时。

r 前缀的主要作用是将一个字符串标记为原始字符串(raw string),这意味着反斜杠 \ 不会被解释为转义字符。这对于处理文件路径非常有用,因为它允许你编写路径而不必担心反斜杠被误解。

代码

# 使用普通字符串

path_normal = "C:\\User\\Documents\\file.txt"

在这行代码中,path_normal 是一个普通字符串,表示文件路径。在这个字符串中,双反斜杠 \\ 用于表示单个反斜杠,因为反斜杠是一个转义字符,所以你需要使用两个反斜杠来表示一个。

代码

# 使用原始字符串

path_raw = r"C:\User\Documents\file.txt"

在这行代码中,path_raw 是一个原始字符串,它使用 r 前缀。这意味着字符串中的反斜杠 \ 不会被解释为转义字符。因此,你只需写单个反斜杠,而不必使用两个。这样做使文件路径更加清晰和易于阅读。

代码

print("普通字符串路径:", path_normal)

print("原始字符串路径:", path_raw)

这两行代码用于打印文件路径。

3.JSON字符串

JSON字符串:有时,你需要在字符串中包含特殊字符,比如\n表示换行。使用原始字符串可以确保这些字符保持原样,例如:json_data = r'{"message": "Hello\nWorld"}'。

代码

import json

# 使用普通字符串,包含转义后的换行

json_data_normal = '{"message": "Hello\\nWorld"}'

# 使用原始字符串,包含转义后的换行

json_data_raw = r'{"message": "Hello\nWorld"}'

parsed_normal = json.loads(json_data_normal)

parsed_raw = json.loads(json_data_raw)

print("普通字符串JSON解析结果:", parsed_normal)

print("原始字符串JSON解析结果:", parsed_raw)

# 创建包含实际的换行的 JSON 数据(使用转义形式)

json_data_actual_newline = '{"message": "Hello\nWorld"}'

# 输出包含实际的换行的 JSON 数据

print("JSON数据(包含实际的换行):", json_data_actual_newline)

输出

普通字符串JSON解析结果: {'message': 'Hello\nWorld'}

原始字符串JSON解析结果: {'message': 'Hello\nWorld'}

JSON数据(包含实际的换行): {"message": "Hello

World"}

 

代码解释

在上面的代码示例中,我们使用了 Python 中的 JSON 模块来处理 JSON 数据,并展示了在 JSON 字符串中 \n 的不进行转义的两种用法:"\\"以及 r 前缀。

  • 首先,我们定义了两个 JSON 数据字符串:json_data_normal 和 json_data_raw。

  • json_data_normal 使用普通字符串,JSON 对象包含了一个没有转义的\n 。

  • json_data_raw 使用原始字符串(r 前缀),JSON 对象同样包含了一个没有转义的 \n 。

  • 我们使用 json.loads() 函数来解析这两个 JSON 数据字符串,并将结果分别存储在 parsed_normal 和 parsed_raw 变量中。

  • 我们输出这两个解析结果。

  • 接下来,我们定义了一个新的 JSON 数据字符串 json_data_actual_newline,这次我们试图在其中包含实际的换行符\n。

  • 最后,我们输出 json_data_actual_newline,它执行了换行操作。

总结

Python中的‘r’前缀是一个强大的工具,让你处理原始字符串时更加轻松,避免了许多常见的转义字符问题。这是每个Python开发者都应该知道的小技巧!

希望可以帮助你。如果你喜欢这个教程,请点赞、分享,并订阅我的专栏以获取更多关于Python和编程的精彩内容。如果你有任何问题或需要更多解释,请在评论中告诉我。谢谢大家的支持,我们下次再见!

posted @ 2024-04-10 11:00  fangpengcheng_方鹏程  阅读(16)  评论(0编辑  收藏  举报