如何在 Python 中使用正则表达式匹配非单词字符?


Python 中的正则表达式模块提供了一个强大的工具,用于在 Python 字符串中进行模式匹配。正则表达式,也称为 regex,使我们能够根据指定的模式搜索、提取和操作文本。文本处理中一项常规且常见的任务是识别非单词字符;这些字符包括符号、标点符号和空格。在本文中,我们将探讨使用 Python 中的正则表达式识别和匹配这些非单词字符的各种方法。我们将提供一些代码示例,每个示例后面都附有分步说明,以指导您完成在字符串中查找非单词字符的过程。

匹配单个非单词字符

示例

  • 在第一个示例中,我们首先导入“re”模块;该模块为 Python 中的正则表达式提供支持。考虑一个名为 text 的示例字符串,其中包含句子“Hello! How are you?”。我们的目标是在此字符串中找到所有非单词字符。

  • 正则表达式 r"\W" 用于匹配非单词字符。\W 模式是一个简写字符类,匹配任何非字母数字字符(即不是字母、数字或下划线)。它包括符号、标点符号和空格。

  • 然后,我们使用 re.findall() 函数搜索文本字符串中模式的所有出现。findall() 函数返回找到的所有匹配项的列表。

import re

# Sample string
text = "Hello! How are you?"

# Regular expression to match non-word characters
pattern = r"\W"

# Find all non-word characters in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

输出

['!', ' ', ' ', '?']

结果如您所见,是一个包含匹配的非单词字符的列表:'!'、三个空格和'?'。

匹配多个非单词字符

示例

  • 在此代码示例中,我们采用一个名为 text 的示例字符串,其中包含句子“Regex is super−duper amazing!!!”。我们现在的任务是在字符串中找到所有连续的非单词字符序列。

  • 此处使用正则表达式 r"\W+"。如前所述,\W 模式匹配单个非单词字符。+ 量词表示我们希望匹配前面模式的一个或多个出现。因此,此表达式将匹配一个或多个非单词字符的任何序列。

  • 我们像以前一样使用 re.findall() 函数查找文本字符串中模式的所有出现。该函数将返回所有匹配序列的列表。

import re

# Sample string
text = "Regex is super-duper amazing!!!"

# Regular expression to match multiple non-word characters
pattern = r"\W+"

# Find all sequences of non-word characters in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

输出

[' ', ' ', '-', ' ', '!!!']

结果是一个包含匹配的非单词字符序列的列表:一个空格、两个连字符和三个感叹号。

匹配非单词字符(不包括空格)

示例

  • 在第三个示例中,我们有一个名为 text 的示例字符串,其中包含句子“Let's keep it simple.”。我们现在的目标是在字符串中找到所有非单词字符,但不包括空格。

  • 正则表达式 r"[^\w\s]" 用于此目的。让我们一步一步地分解它

  • \w 匹配任何字母数字字符(字母、数字和下划线)。

  • \s 匹配任何空白字符(空格、制表符、换行符等)。

  • 模式开头的 ^ 符号否定表达式,因此 [^\w\s] 匹配任何不是字母数字字符或空白字符的字符,有效地排除了空格。

  • 与之前一样,我们使用 re.findall() 函数查找文本字符串中模式的所有出现,它将返回所有匹配的非单词字符(不包括空格)的列表。

import re

# Sample string
text = "Let's keep it simple."

# Regular expression to match non-word characters excluding spaces
pattern = r"[^\w\s]"

# Find all non-word characters (excluding spaces) in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

输出

["'", '.']

结果是一个包含匹配的非单词字符的列表:一个撇号和一个句号。

使用单词边界匹配非单词字符

示例

  • 在这个特定示例中,我们有一个名为 text 的示例字符串,其中包含句子“She said: 'I love regex!' and smiled.”。我们的目标是在字符串中找到所有作为完整单词出现的非单词字符。

  • 正则表达式 r"\b\W+\b" 用于此任务。让我们一步一步地分解它

  • \b 表示单词边界。它匹配单词开头或结尾处的空字符串(其中单词定义为字母数字字符和下划线的序列)。

  • \W+ 匹配一个或多个非单词字符。

  • \b\W+\b 确保我们仅在非单词字符作为完整单词出现时才匹配它们,而不是作为更大单词的一部分。

  • \b\W+\b 确保我们仅在非单词字符作为完整单词出现时才匹配它们,而不是作为更大单词的一部分。

import re

# Sample string
text = "She said: 'I love regex!' and smiled."

# Regular expression to match non-word characters using word boundaries
pattern = r"\b\W+\b"

# Find all non-word characters bounded by word boundaries
matches = re.findall(pattern, text)

# Output the matches
print(matches)

输出

[' ', ": '", ' ', ' ', "!' ", ' ']

结果是一个包含匹配的非单词字符的列表:一个冒号,前面和后面都有空格,一个撇号,前面和后面都有空格,以及一个感叹号,前面和后面都有空格。

使用否定查找没有非单词字符的单词

示例

  • 在最后一个示例中,我们有一个名为 text 的示例字符串,其中包含句子“I enjoy Python programming!”。现在,我们想找到字符串中所有没有非单词字符的单词。

  • 正则表达式 r"\b\w+\b" 用于此目的。让我们一步一步地分解它

  • \b 表示单词边界,如前一个示例所述。

  • \w+ 匹配一个或多个字母数字字符(字母、数字和下划线)。它有效地匹配不包含任何非单词字符的完整单词。

  • 使用 re.findall(),我们查找文本字符串中模式的所有出现,并返回一个不包含任何非单词字符的匹配单词列表。

import re

# Sample string
text = "I enjoy Python programming!"

# Regular expression to match words without any non-word characters
pattern = r"\b\w+\b"

# Find all words without any non-word characters
matches = re.findall(pattern, text)

# Output the matches
print(matches)

输出

['I', 'enjoy', 'Python', 'programming']

我们获得的结果是一个包含匹配单词的列表:'I'、'enjoy'、'Python' 和'programming'。句子中的这些单词完全由字母数字字符组成,并且没有非单词字符。

简而言之,在本文中,我们探讨了如何使用 Python 中的正则表达式识别和匹配字符串中非单词字符的不同方法。我们从简单的示例开始,然后处理更复杂的示例;我们演示了识别非单词字符的各种技术。通过使用正则表达式,可以有效地处理文本处理任务;这使得从字符串中提取相关信息变得更容易。

正则表达式为我们提供了一种灵活且强大的处理文本的方法;这使我们能够执行复杂的搜索和操作。随着您熟悉正则表达式,您会意识到它们在多个领域都非常宝贵,包括文本处理、数据提取和数据验证等。

必须注意,使用不同的示例进行练习并试验正则表达式将提高您有效使用它们的能力。一开始处理正则表达式似乎令人生畏,但随着时间的推移和实践,您会发现自己越来越熟练地创建适合您特定需求的模式。

因此,大胆尝试,探索,并享受掌握 Python 中正则表达式艺术的乐趣。在您的项目中释放文本操作的真正潜力!

更新于: 2023年9月8日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告