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

2024-05-29 00:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python上运行正则表达式查询,但遇到以下问题:

在法语中,句子的主语可以出现在动词前后。 例如,“她说”这句话可以翻译成“elle-dit”和“dit-elle”,其中“elle”是“她”,而“dit”是“说”

无论主语“elle”在动词“dit”之前还是之后,是否可能只捕获包含“elle”和“dit”的句子?我从以下几点开始:

(elle).{0;10}(dit).{0;10}(elle)

但是现在我想在找到另一个后,使其中一个(elle)成为可选的。在这种情况下,*+运算符没有帮助


Tags: 情况运算符动词句子dit主语elle
1条回答
网友
1楼 · 发布于 2024-05-29 00:26:23

您可以使用PyPi regex模块,该模块可以使用pip install regex(或pip3 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)])

online Python demo

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

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})?-可选的回溯,从0到10个字符内获取整个单词ilelle
  • \b(?P<predicate>dit|mange)\b-一个完整的单词ditmange
  • (?=.{0,10}\b(?P<subject>il|elle)\b)?-从谓词中获取0到10个字符内的整个单词ilelle的可选期待

相关问题 更多 >

    热门问题