为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式使组只出现一次

正则表达式使组只出现一次

陪伴而非守候 2023-08-08 16:32:42
我正在尝试在 Python 上运行正则表达式查询,但遇到以下问题:在法语中,句子的主语可以出现在动词之前和之后。例如,句子“she say”可以翻译为“elle dit”和“dit-elle”,其中“elle”是“she”,“dit”是“says”。是否可以仅捕获包含“elle”和“dit”的句子,无论主语“elle”在动词“dit”之前还是之后?我从以下几方面入手:(elle).{0;10}(dit).{0;10}(elle)但现在我想(elle)在找到另一个时将其中之一设为可选。和运算符在这种情况下没有帮助*。+
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以使用可以使用(或)安装的PyPiregex模块:pip install regexpip3 install regex


import regex

p = r'(?<=\b(?P<subject>il|elle)\b.{0,10})?\b(?P<predicate>dit|mange)\b(?=.{0,10}\b(?P<subject>il|elle)\b)?'

print( [x.groupdict() for x in regex.finditer(p, 'elle dit et dit-elle et il mange ... dit-il', regex.S)])

查看在线 Python 演示


该模式可以从变量动态创建:


subjects = ['il', 'elle']

predicates = ['dit', 'mange']

p = fr'(?<=\b(?P<subject>{"|".join(subjects)})\b.{0,10})?\b(?P<predicate>{"|".join(predicates)})\b(?=.{0,10}\b(?P<subject>{"|".join(subjects)})\b)?'

细节

  • (?<=\b(?P<subject>il|elle)\b.{0,10})?- 可选回顾以抓取整个单词ilelle0 到 10 个字符内的单词

  • \b(?P<predicate>dit|mange)\b- 整个单词ditmange

  • (?=.{0,10}\b(?P<subject>il|elle)\b)?- 可选的期待从谓词中获取整个单词il或0 到 10 个字符内的内容。elle


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信