You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配仅含最多一个换行的空白字符问题

问题解答

当前正则表达式a\s*b无法满足需求。

原因分析

\s在正则中匹配任意空白字符(包括空格、制表符、换行符等),而*表示匹配零次或多次。这意味着a\s*b会允许a和b之间出现任意数量的换行符,比如a\n\nb或a \n\n b这类包含两个及以上换行的字符串也会被匹配,违反了“最多存在一个换行符”的要求。

满足需求的正则表达式

可以使用以下正则实现要求:

r = r"a[\t ]*(?:\n[\t ]*)?b"

规则说明

  • [\t ]*:匹配任意数量(包括零个)的空格或制表符
  • (?:\n[\t ]*)?:可选分组,匹配一个换行符加上任意数量的空格/制表符,?限制该分组最多出现一次
  • 整体逻辑:a之后可接若干空格/制表符,最多跟一组“换行+若干空格/制表符”,最后接b,确保中间最多只有一个换行符,且其余均为空白字符

验证示例

用该正则测试你的案例:

import re

r = r"a[\t ]*(?:\n[\t ]*)?b"

# 应匹配的情况(输出匹配对象):
print(re.match(r, "ab"))
print(re.match(r, "a   b"))
print(re.match(r, "a \n b"))

# 不应匹配的情况(输出None):
print(re.match(r, "a\n\nb"))
print(re.match(r, "a    \n\n  b"))

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:03:19