python - 正则表达式:将子字符串替换为多个单词形式

标签 python regex linguistics

一些人类语言的特征在于范围形态和发达的语法性别系统。例如,在斯拉夫语言中,根据性别的数量(阳性阴性中性):

white <-> белый (m), белая (f), белое (n)     

在某些情况下,在使用正则表达式替换子字符串时获取可能的单词形式列表会很有用。

现在我很好奇,如果 Python(或任何其他脚本语言)允许执行如下操作(警告:下面的代码片段是一个类似 Python 的伪代码,但不是有效的 Python 代码):

# I would like to handle russian genders like that:  
>>> re.sub(r"Бел.", r"Бел[ый|ая|ое]", "Бел. Берель")
["Белый Берель", "Белая Берель", "Белое Берель"]

# A very artifical example for those who prefer latin:
>>> re.sub(r"Go.", r"Go[ld|lden]", "Go. Ochre")
["Gold Ochre", "Golden Ochre"] 

那么我可以使用正则表达式来获取匹配的单词组合列表吗?

最佳答案

不,但是您可以使用这样的列表推导式遍历后缀列表(对于 Python 2):

>>> suffixes = u'ый|ая|ое'.split('|')
>>> suffixes
[u'\u044b\u0439', u'\u0430\u044f', u'\u043e\u0435']
>>> replacements = [re.sub(u"Бел.", u"Бел%s" % s, u"Бел. Берель") for s in suffixes]
>>> replacements
[u'\u0411\u0435\u043b\u044b\u0439 \u0411\u0435\u0440\u0435\u043b\u044c', u'\u0411\u0435\u043b\u0430\u044f \u0411\u0435\u0440\u0435\u043b\u044c', u'\u0411\u0435\u043b\u043e\u0435 \u0411\u0435\u0440\u0435\u043b\u044c']
>>> for s in replacements:
...     print s
... 
Белый Берель
Белая Берель
Белое Берель

在 Python 3 中更清晰一些:

>>> suffixes = u'ый|ая|ое'.split('|')
>>> suffixes
['ый', 'ая', 'ое']
>>> >>> suffixes = u'ый|ая|ое'.split('|')
>>> suffixes
[u'\u044b\u0439', u'\u0430\u044f', u'\u043e\u0435']
>>> replacements = [re.sub("Бел.", "Бел%s" % s, "Бел. Берель") for s in suffixes]
>>> replacements
['Белый Берель', 'Белая Берель', 'Белое Берель']

关于python - 正则表达式:将子字符串替换为多个单词形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329277/

相关文章:

python - 如何使用 Python 测试 timescaledb 数据库

python - 如何连接 pandas MultiIndex DataFrame 中的列值?

jquery - 如何使用正则表达式验证整数和小数值?

alignment - 自然语言处理-单词对齐

python - pandas系列操作

python - ImportError : libkea. so.1.4.7:无法打开共享对象文件:没有这样的文件或目录

javascript - 正则表达式用Javascript替换每第二次出现的内容

regex - 使用正则表达式在 bash 中搜索 LDAP 查询

ruby - 如何以编程方式生成类似 Heroku 的子域名?

tensorflow - 使用 Tensorflow 进行 IPA(国际音标)转录