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

如何修改Python正则函数实现指定条件下的代词前置标记

调整Python正则处理法语代词le/les的逻辑

需求说明

修改现有Python正则函数,处理法语代词le/les时需遵循以下规则:

  • 仅当代词le前最近的((PERS)...))序列与它间隔至少2个单词,或无前序((PERS)...))序列时,在le前添加(SINGULAR_PERS)
  • 仅当代词les前最近的((PERS)...))序列与它间隔至少2个单词,或无前序((PERS)...))序列时,在les前添加(PLURAL_PERS)

输入输出示例

输入文本:
le ((VERB)empujé) hasta ((VERB)dejarle) en ese lugar. A ((PERS)Marcos) le ((VERB)dijeron) y luego le ((VERB)ayudo)

目标输出文本:
(SINGULAR_PERS) le ((VERB)empujé) hasta ((VERB)dejarle) en ese lugar. A ((PERS)Marcos) le ((VERB)dijeron) y luego (SINGULAR_PERS) le ((VERB)ayudo)

正则实现方案

利用正向否定预查实现规则,核心是匹配le/les时,先排除前面存在间隔少于2个单词的((PERS)...))的情况,符合条件再添加标记。

完整代码示例

import re

text = "le ((VERB)empujé) hasta ((VERB)dejarle) en ese lugar. A ((PERS)Marcos) le ((VERB)dijeron) y luego le ((VERB)ayudo)"

# 处理单数代词le
pattern_le = r'(?<!\((PERS)[^)]+\)\s+le)(?<!\((PERS)[^)]+\)\s+\S+\s+le)\b(le)\b'
result = re.sub(pattern_le, r'(SINGULAR_PERS) \3', text)

# 处理复数代词les(按需启用)
pattern_les = r'(?<!\((PERS)[^)]+\)\s+les)(?<!\((PERS)[^)]+\)\s+\S+\s+les)\b(les)\b'
result = re.sub(pattern_les, r'(PLURAL_PERS) \3', result)

print(result)

正则逻辑拆解

  • (?<!\((PERS)[^)]+\)\s+le):否定预查,排除((PERS)...))直接紧跟空格+le(间隔0个单词)的情况
  • (?<!\((PERS)[^)]+\)\s+\S+\s+le):否定预查,排除((PERS)...))后跟1个单词+空格+le(间隔1个单词)的情况
  • 两个预查结合,确保匹配的le要么无前序((PERS)...)),要么与最近的((PERS)...))间隔至少2个单词

验证结果

运行代码后输出与目标示例完全一致:

(SINGULAR_PERS) le ((VERB)empujé) hasta ((VERB)dejarle) en ese lugar. A ((PERS)Marcos) le ((VERB)dijeron) y luego (SINGULAR_PERS) le ((VERB)ayudo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:47