本文详解如何用正则表达式精准识别字符串中是否存在标准或 unicode 智能引号(如 “” ‘’ 等),提供可直接运行的代码、完整字符列表及实用注意事项。
在文本处理中,用户输入或富文本(如 Microsoft Word、网页内容)常包含多种引号变体:除了 ASCII 中的 straight quotes “、’ 和反引号 `,还有 Unicode 中的“智能引号”(smart quotes)——例如左双引号 “(U+201C)、右双引号 ”(U+201D)、左单引号 ‘(U+2018)、右单引号 ’(U+2019)。这些字符在视觉上更美观,但对程序而言是独立的 Unicode 码点,需显式纳入匹配范围。
Python 正则表达式不提供内置的“所有引号”字符类(如 \p{Pf} 这类 Unicode 类别需 regex 库支持),因此最可靠、兼容性最强的方式是显式枚举常用引号字符。以下是推荐的完整引号集合(覆盖绝大多数实际场景):
| 类型 | 字符 | Unicode 名称 | Python 字符串表示 |
|---|---|---|---|
| ASCII 双引号 | “ | QUOTATION MARK | “ |
| ASCII 单引号 | ‘ | APOSTROPHE | ‘ |
| ASCII 反引号 | ` | GRAVE ACCENT | ` | ||
| 智能双引号(左) | “ | LEFT DOUBLE QUOTATION MARK | “ |
| 智能双引号(右) | ” | RIGHT DOUBLE QUOTATION MARK | ” |
| 智能单引号(左) | ‘ | LEFT SINGLE QUOTATION MARK | ‘ |
| 智能单引号(右) | ’ | RIGHT SINGLE QUOTATION MARK | ’ |
| 其他常见变体(可选) | «, », ‹, › | LEFT/RIGHT POINTING DOUBLE/SINGLE ANGLE QUOTATION MARK | «, », ‹, › |
✅ 检测字符串是否含任意引号的推荐方案(简洁高效):
import re
def contains_quote(s: str) -> bool:
# 匹配任意一种引号字符(注意:此处为正向匹配,更直观)
quote_pattern = r'[\"\'`“”‘’«»‹›]'
return bool(re.search(quote_pattern, s))
# 示例测试
test_strings = [
'Plain text without quotes',
'"Double quoted"',
"‘Smart single quoted’",
"«Guillemets» and `backticks`",
"No quotes here — but em-dash."
]
for s in test_strings:
print(f"{repr(s):<40} → {contains_quote(s)}")
⚠️ 重要注意事项: