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

如何实现匹配空串或指定方向字符的正则表达式?

解决方向符匹配的正则问题

问题原因

你之前的正则表达式r"[<>]|"之所以会在方向符不在首位时返回空串,是因为|分支的空串会在字符串的起始位置直接匹配成功(空串无需任何字符即可匹配),re.search找到第一个匹配项后就会停止,不会继续查找后续的方向符,完全不符合需求。

正确实现方式

根据你的需求(优先匹配存在的>,无>时匹配<,都没有返回空串),以下几种实现都能达到和原Python逻辑一致的效果:

方式一:分两次正则判断(最贴合原逻辑)

import re

def extract_direction(s):
    if re.search(r">", s):
        return ">"
    elif re.search(r"<", s):
        return "<"
    else:
        return ""

逻辑和你给出的原Python表达式完全对齐:先检查字符串中是否存在>,存在则返回;否则检查是否存在<,存在则返回;都没有返回空串。

方式二:一次提取所有方向符再判断

import re

def extract_direction(s):
    found_symbols = re.findall(r"[<>]", s)
    return ">" if ">" in found_symbols else "<" if "<" in found_symbols else ""

用re.findall提取字符串中所有方向符,再按优先级判断返回结果。

方式三:单个正则实现优先级匹配

利用正则的分支优先级,先匹配包含>的情况,再匹配包含<的情况,最后匹配空串:

import re

def extract_direction(s):
    match_result = re.search(r"(?s).*(>)|.*(<)|", s)
    return match_result.group(1) or match_result.group(2) or ""
  • (?s)让.匹配换行符,确保跨行字符串也能处理
  • .*(>)会捕获字符串中最后一个>(只要存在>就会触发这个分支)
  • 若没有>,.*(<)会捕获最后一个<
  • 都没有则匹配空串,最后返回第一个非空的捕获组或空串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:19