Python 正则表达式匹配引号内

正则表达式是一种强大且灵活的工具,用于匹配和操作字符串。在 Python 中,我们可以使用正则表达式模块 re 来实现对字符串的匹配和提取。本文将介绍如何使用正则表达式来匹配引号内的内容。

在很多文本处理场景中,我们常常会遇到需要从一段文字中提取引号内的内容的情况。例如,从 HTML 文档中提取标签属性值,或者从代码中提取字符串常量等。使用正则表达式可以简化这个任务。

正则表达式基础

在开始之前,让我们先来了解一些正则表达式的基础知识。

正则表达式是由一系列字符和特殊字符组成的模式,用于匹配字符串。以下是一些常见的正则表达式元字符:

  • . : 匹配任意字符(除了换行符)
  • ^ : 匹配字符串的开头
  • $ : 匹配字符串的结尾
  • * : 匹配前面的字符零次或多次
  • + : 匹配前面的字符一次或多次
  • ? : 匹配前面的字符零次或一次
  • [] : 匹配括号内的任意字符
  • () : 用于分组和捕获匹配的内容

在正则表达式中,可以使用反斜杠 \ 来转义特殊字符,使其失去特殊含义。

匹配引号内的内容

要匹配引号内的内容,我们可以使用以下正则表达式模式:

import re

pattern = r'(["\'])(.*?)\1'

这个正则表达式的含义是:

  • (["\']) 匹配一个引号字符(单引号或双引号),并将其作为第一个分组
  • (.*?) 匹配任意字符(非贪婪模式),并将其作为第二个分组
  • \1 引用第一个分组的内容,确保引号是成对出现的

接下来,我们可以使用 re 模块的 findall 方法来查找所有匹配的结果:

text = 'This is a "test" sentence with "quotes" inside.'
matches = re.findall(pattern, text)

findall 方法会返回一个列表,其中每个元素都是一个匹配的结果。在这个例子中,matches 的值将会是:

[('"', 'test'), ('"', 'quotes')]

我们成功地从原始文本中提取出了引号内的内容。

示例应用

现在,让我们来看几个具体的示例应用。

示例 1:提取 HTML 标签属性值

假设我们有一个 HTML 文档,其中包含一些标签和属性。我们希望提取出所有标签的属性值。

<html>
<body>
    <div class="container">This is a container.</div>
    <p id="paragraph">This is a paragraph.</p>
    <a rel="nofollow" href=" is a link.</a>
</body>
</html>

我们可以使用以下代码来实现:

html = """<html>
<body>
    <div class="container">This is a container.</div>
    <p id="paragraph">This is a paragraph.</p>
    <a rel="nofollow" href=" is a link.</a>
</body>
</html>"""

pattern = r'(["\'])(.*?)\1'

matches = re.findall(pattern, html)

attributes = [m[1] for m in matches]
print(attributes)

输出结果为:

['container', 'paragraph', '

我们成功地提取出了 HTML 标签的属性值。

示例 2:提取 Python 代码中的字符串常量

假设我们有一段 Python 代码,其中包含一些字符串常量。我们希望提取出所有字符串常量的值。

code = """x = "Hello, world!"
y = 'This is a string.'
z = "Another string with 'quotes' inside."
"""

pattern = r'(["\'])(.*?)\1'

matches = re.findall(pattern, code)

constants = [m[