示例代码:
import re
def clean_text(text: str) -> str:
text = re.sub(r"[^\w\s.,!?]", " ", text)
text = re.sub(r"\s+", " ", text)
return text.strip()
代码的目的是对输入的文本进行“清洗”,让文本只保留字母、数字、下划线、空格和部分标点符号(句号、逗号、感叹号和问号),同时把连续的空白字符压缩成一个空格,并移除首尾多余的空白。下面逐行解释代码的作用,并用具体数值举例说明:
1. 替换不需要的字符
text = re.sub(r"[^\w\s.,!?]", " ", text)
-
作用:
这行代码使用正则表达式将文本中所有不属于下列范围的字符替换为空格:\w
:所有字母、数字和下划线(在 Python 3 中,默认支持 Unicode,所以中文和其他语言的字母也可以匹配)。\s
:空白字符,包括空格、制表符、换行符等。.,!?
:句号、逗号、感叹号和问号。
-
解释:
任何不符合这些规则的字符都会被替换成一个空格。例如,如果文本中有特殊符号或其他标点(如@
、#
、$
、%
等),都会被变成空格。 -
举例说明:
假设输入的文本为
"Hello @world! How's everything? #amazing"
处理第一行后:"Hello "
保持不变,因为字母和空格符合要求;@
被替换为空格;"world!"
保持不变,因为感叹号允许;How's
中的单引号'
不在允许范围内,所以被替换为空格,变成"How s"
;#
也被替换为空格;"amazing"
保持不变。
最终结果可能变成:
"Hello world! How s everything? amazing"
2. 合并多余的空白
text = re.sub(r"\s+", " ", text)
-
作用:
这行代码使用正则表达式将文本中所有连续的空白字符(一个或多个空格、换行等)替换成单个空格。 -
解释:
经过第一步替换后,可能会出现连续多个空格,比如上例中"Hello world!"
中有两个空格。这一步将把这些多个空格压缩成一个空格。 -
举例说明:
继续上面的例子,文本当前为
"Hello world! How s everything? amazing"
使用第二行后会变成:"Hello world! How s everything? amazing"
这里所有连续的空格都只剩下一个。
3. 去除首尾空白
return text.strip()
-
作用:
使用strip()
方法去除文本开头和结尾处的空白字符(空格、换行符等)。 -
解释:
如果文本前后有多余的空格或换行,就会被移除,保证返回的文本整洁。 -
举例说明:
如果经过前两步处理后,文本变成
" Hello world! How s everything? amazing "
那么strip()
调用后返回的结果为:"Hello world! How s everything? amazing"
总结
这段代码整体的作用可以理解为:
- 第一步: 将文本中除字母、数字、下划线、空格和基本标点之外的所有字符用空格替换掉。
- 第二步: 将多个连续的空白字符压缩成一个空格。
- 第三步: 去掉文本首尾多余的空白。
完整举例:
假设输入文本为
" Hello @world! How's everything? #amazing!!! "
-
第一步处理:
"Hello"
保持不变;@
替换为空格;"world!"
保持不变;"How's"
变成"How s"
('
被替换为空格);"everything?"
保持不变;#
替换为空格;"amazing"
保持不变;"!!!"
中每个!
是允许的,所以保留。
得到:
" Hello world! How s everything? amazing!!! "
-
第二步处理:
将所有连续空白压缩为一个空格:" Hello world! How s everything? amazing!!! "
-
第三步处理:
去除首尾空格:"Hello world! How s everything? amazing!!!"
这样返回的结果就是干净、格式统一的文本。