正则表达式使组只出现一次
regex make group appear only once
我正在尝试 运行 Python 上的正则表达式查询,但遇到以下问题:
在法语中,句子的主语可以出现在动词前后。
例如,句子“she says”可以翻译成“elle dit”和“dit-elle”,其中“elle”是“she”,“dit”是“says”。
是否可以仅捕获包含“elle”和“dit”的句子,无论主语“elle”是在动词“dit”之前还是之后?我从以下开始:
(elle).{0;10}(dit).{0;10}(elle)
但现在我想在 (elle)
找到另一个时将其中一个设为可选。 *
和 +
运算符在这种情况下没有帮助。
您可以使用 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)])
模式可以从变量动态创建:
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 个字符内抓取整个单词 il
或 elle
\b(?P<predicate>dit|mange)\b
- 一个完整的单词 dit
或 mange
(?=.{0,10}\b(?P<subject>il|elle)\b)?
- 可选期待从谓词中获取 0 到 10 个字符内的整个单词 il
或 elle
。
我正在尝试 运行 Python 上的正则表达式查询,但遇到以下问题:
在法语中,句子的主语可以出现在动词前后。 例如,句子“she says”可以翻译成“elle dit”和“dit-elle”,其中“elle”是“she”,“dit”是“says”。
是否可以仅捕获包含“elle”和“dit”的句子,无论主语“elle”是在动词“dit”之前还是之后?我从以下开始:
(elle).{0;10}(dit).{0;10}(elle)
但现在我想在 (elle)
找到另一个时将其中一个设为可选。 *
和 +
运算符在这种情况下没有帮助。
您可以使用 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)])
模式可以从变量动态创建:
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 个字符内抓取整个单词 \b(?P<predicate>dit|mange)\b
- 一个完整的单词dit
或mange
(?=.{0,10}\b(?P<subject>il|elle)\b)?
- 可选期待从谓词中获取 0 到 10 个字符内的整个单词il
或elle
。
il
或 elle