gpt4 book ai didi

python - 如何从单词列表创建正则表达式?

转载 作者:太空狗 更新时间:2023-10-29 21:34:59 24 4
gpt4 key购买 nike

我有一个单词字典(实际上我有嵌套的动词变位字典,但这不相关),我想通过组合它们来制作一个正则表达式。

{
'yo': 'hablaba',
'tú': 'hablabas',
'él': 'hablaba',
'nosotros': 'hablábamos',
'vosotros': 'hablabais',
'ellos': 'hablaban',
'vos': 'hablabas',
}

... 制作:

'habl((aba(s|is|n)?)|ábamos)' # I think that's right

如果我不包含 'hablábamos' 这很容易 - 它们都是相同的前缀,我可以获得:

'hablaba(s|is|n)?'

...但我想要一个通用的形式。这可能吗?

最佳答案

是的,我相信这是可能的。

为了让您入门,我将这样分解问题。

通过查找与所有拒绝值的开头匹配的最长可能字符串来计算根:

>>> root = ''
>>> for c in hablar['yo']:
... if all(v.startswith(root + c) for v in hablar.itervalues()):
... root += c
... else:
... break
...
>>> root
'habl'

单词的剩余部分组成一个 list 结尾。

>>> endings = [v[len(root):] for v in hablar.itervalues()]
>>> print endings
['abas', 'aba', 'abais', 'aba', '\xc3\xa1bamos', 'aban', 'abas']

然后您可能想要清除重复项:

>>> unique_endings = set(endings)
>>> print unique_endings
set(['abas', 'abais', '\xc3\xa1bamos', 'aban', 'aba'])

然后用管道将这些结尾连接在一起:

>>> conjoined_endings = '|'.join(unique_endings)
>>> print conjoined_endings
abas|abais|ábamos|aban|aba

形成正则表达式是一件简单的事情,将根和括号中的 conjoined_endings 字符串组合起来:

>>> final_regex = '{}({})'.format(root, conjoined_endings)
>>> print final_regex
habl(abas|abais|ábamos|aban|aba)

关于python - 如何从单词列表创建正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com