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

求严格匹配{word}{.,#}{word}格式的正则表达式,需保留普通单词

解决严格匹配带符号单词并保留普通单词的正则方案

我完全懂你的痛点:之前的正则只盯着带符号的结构,结果把普通单词都漏掉了,现在需要的是既严格拆分符合格式的带符号内容,又能完整保留文本里的纯单词。咱们可以通过「分支正则+结果扁平化处理」来搞定这个需求。

实现思路

核心是让正则同时覆盖两类场景:

  1. 符合要求的带符号结构(符号单侧或双侧有单词,比如#400、no.16)
  2. 不含.,#的普通纯单词

之后对匹配结果做过滤,提取所有非空的分组内容,就能得到你想要的拆分/保留列表。

代码实现

import re

def parse_target_text(text):
    # 正则分支覆盖所有合法场景
    pattern = r'(\w+)([.,#])(\w+)|([.,#])(\w+)|(\w+)([.,#])|(\w+)'
    matches = re.findall(pattern, text)
    # 扁平化匹配结果,过滤空值
    final_result = []
    for match_tuple in matches:
        final_result.extend([item for item in match_tuple if item])
    return final_result

测试验证

用你给出的示例和拓展场景测试,结果完全符合预期:

  • 输入no.16 → 输出['no', '.', '16']
  • 输入#400 → 输出['#', '400']
  • 输入word1.word2 → 输出['word1', '.', 'word2']
  • 输入ONE TWO THREE #400 → 输出['ONE', 'TWO', 'THREE', '#', '400']
  • 输入test. hello → 输出['test', '.', 'hello'](覆盖单侧单词+符号的场景)
  • 输入plain_word → 输出['plain_word'](普通单词直接保留)

正则分支说明

每个分支对应一种合法的目标场景:

  1. (\w+)([.,#])(\w+):匹配符号两侧都有单词的情况(如word1.word2)
  2. ([.,#])(\w+):匹配符号在前、单词在后的情况(如#400)
  3. (\w+)([.,#]):匹配单词在前、符号在后的情况(如test.)
  4. (\w+):匹配不含符号的普通单词,确保不会漏掉文本里的纯单词

这样既严格匹配了你要的带符号格式,又能完整保留所有普通单词,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Aditya Vartak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:47:31