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


掌握正则表达式及其“re”模块,将开启 Python 中强大的文本处理功能。正则表达式,通常称为 regex,使我们能够识别、搜索和操作字符串中的特定模式。在我们工作中经常遇到的一个常见任务是使用正则表达式在文本中匹配特定单词。在本文中,我们将深入探讨在 Python 中使用正则表达式查找和匹配字符串中单词的技巧。我们将通过一些代码示例来探索这个领域,每个示例后面都跟着分步说明,这将肯定能指导您踏上使用 regex 进行单词匹配的激动人心的旅程。

匹配简单的单词

示例

  • 在第一个代码示例中,我们首先导入“re”模块;此模块允许我们在 Python 中使用正则表达式。我们的目标是在给定的文本中匹配单词“fox”。

  • 要创建正则表达式模式,我们使用 re.escape() 函数来确保单词中的任何特殊字符都被视为字面字符。如果单词包含正则表达式元字符,则这对于避免意外行为至关重要。

  • 模式 r"\b" + re.escape(word_to_match) + r"\b" 使用 \b 单词边界锚点将单词“fox”匹配为完整单词。\b 锚点确保该单词不是较长单词的一部分,并且它被非单词字符或字符串的开头/结尾包围。

  • 接下来,我们使用 re.search() 函数查找文本中单词的第一次出现。如果找到匹配项,我们使用 match.group() 输出匹配的单词。否则,我们打印“未找到单词”。

import re

# Sample text
text = "The quick brown fox jumps over the lazy dog."

# The word we want to match
word_to_match = "fox"

# Regular expression pattern to match the word
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text
match = re.search(pattern, text)

# Output the match
if match:
    print("Word found:", match.group())
else:
    print("Word not found.")

输出

Word found: fox

不区分大小写的单词匹配

示例

  • 在此代码片段中,我们有一个示例文本,其中提到了 Python 编程语言。我们的目标是不区分大小写地匹配单词“Python”。这意味着正则表达式应该查找“Python”,无论它在文本中是作为“Python”还是“python”出现。

  • 为了实现不区分大小写,我们在 re.search() 函数的第三个参数中使用 re.IGNORECASE 标志。此标志指示正则表达式引擎在搜索单词时忽略大小写。

  • 其余代码与前面的示例类似。我们使用单词边界锚点创建正则表达式模式,并使用 re.escape() 来确保安全匹配单词。然后,我们执行搜索并相应地输出结果。

import re

# Sample text
text = "The Python programming language is versatile and powerful."

# The word we want to match (case-insensitive)
word_to_match = "python"

# Regular expression pattern for case-insensitive word matching
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text (case-insensitive)
match = re.search(pattern, text, re.IGNORECASE)

# Output the match
if match:
    print("Word found:", match.group())
else:
    print("Word not found.")

输出

Word found: Python

匹配具有不同拼写形式的单词

示例

  • 在此示例中,我们有一个示例文本,其中包含单词“color”和“colour”的不同拼写形式。我们的任务是匹配这两种拼写形式,而不管大小写如何。

  • 为了匹配不同的拼写形式,我们使用 |(管道)符号创建正则表达式模式来表示 OR 运算符。这使我们能够为单词指定备选拼写。我们还包含 re.IGNORECASE 标志以确保不区分大小写匹配。

  • 模式 r"\b(" + re.escape(word_to_match) + r")\b" 以及单词边界锚点确保我们匹配整个单词,而不是单词的一部分。

  • 我们使用 re.findall() 查找文本中不同拼写形式的所有出现情况,并将匹配项存储在 matches 变量中。最后,我们输出匹配的单词,用逗号和空格将它们连接起来。

import re

# Sample text with variant spellings of a word
text = "Color or colour, which one do you prefer?"

# The word we want to match (variant spellings)
word_to_match = "color|colour"

# Regular expression pattern to match variant spellings
pattern = r"\b(" + re.escape(word_to_match) + r")\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else:
    print("Word not found.")

输出

Word not found.

匹配带有前缀或后缀的单词

示例

  • 在倒数第二个示例中,我们有一个包含带有前缀或后缀的单词的示例文本。我们的目标是匹配单词“uncomplete”,而不管它是否带有任何前缀或后缀出现。

  • 为了实现这一点,我们在想要匹配的单词的两侧使用 \w*(零个或多个单词字符)创建正则表达式模式。re.IGNORECASE 标志确保不区分大小写匹配。

  • 模式 r"\b\w*" + re.escape(word_to_match) + r"\w*\b" 使用单词边界锚点以及 \w* 来匹配整个单词,即使它在前后有字符。

  • 我们使用 re.findall() 查找文本中带有前缀或后缀的单词的所有出现情况,并将匹配项存储在 matches 变量中。最后,我们输出匹配的单词,用逗号和空格将它们连接起来。

import re

# Sample text with words having prefixes or suffixes
text = "The project is uncompleted, but they're working on it."

# The word with prefixes or suffixes we want to match
word_to_match = "uncomplete"

# Regular expression pattern to match word with prefixes or suffixes
pattern = r"\b\w*" + re.escape(word_to_match) + r"\w*\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else:
    print("Word not found.")

输出

Words found: uncompleted

匹配长度可变的单词

示例

  • 在最后一个示例中,我们有一个示例文本,其中在不同的上下文中提到了单词“sun”。我们的任务是在文本中匹配单词“sun”,而不管其位置或长度如何。

  • 为了实现这一点,我们使用单词边界锚点 `\b` 创建正则表达式模式,以确保我们匹配整个单词。像往常一样,我们使用 `re.escape()` 安全地处理单词中的任何特殊字符,并使用 `re.IGNORECASE` 进行不区分大小写匹配。

  • 模式 `r"\b" + re.escape(word_to_match) + r"\b"` 将匹配单词“sun”在任何作为完整单词出现的地方。

  • 我们使用 `re.findall()` 查找文本中单词“sun”的所有出现情况,无论其位置或长度如何。匹配项存储在 `matches` 变量中,我们输出它们,用逗号和空格将单词连接起来。

import re

# Sample text with words of varying lengths
text = "The sun sets early in summer, but late in winter."

# The word we want to match with variable lengths
word_to_match = "sun"

# Regular expression pattern to match word with variable lengths
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else: print("Word not found.")

输出

Words found: sun

总之,在本文中,您已经了解了如何在 Python 中利用正则表达式的强大功能来查找和匹配字符串中的单词。正则表达式提供了一种灵活且有效的方法来处理文本。此过程使您能够轻松地执行复杂的搜索和操作。

在整篇文章中,您已经意识到我们探索了一些实用的代码示例,其中展示了使用正则表达式进行单词匹配的各个方面。我们学习了各种任务,例如如何匹配简单的单词、执行不区分大小写匹配、处理不同的拼写形式、查找带有前缀或后缀的单词,甚至匹配长度可变的单词。

随着您继续练习和试验正则表达式,您将更深入地了解其功能。您将成为文本处理任务中创建强大模式的专家。Regex 是您 Python 工具包中一项宝贵的工具,有了它,您肯定能够应对数据分析、网页抓取、自然语言处理等领域的各种挑战。

请注意,您必须不断磨练自己的技能,并探索在项目中使用正则表达式的新方法。愿您与正则表达式的旅程引导您在 Python 编程的世界中发现新的和令人兴奋的可能性!

更新于: 2023-09-08

3K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告