给定输入前缀,在 Python re 中获取后缀



我有一个接受字符串和前缀词的函数。我想使用 re.findall 来获取给定前缀后面的后缀单词列表。例如:

string: "My mother gave my sister my robot." 
prefix: "my"
result: ["mother", "sister", "robot"]

我的实现是

def suffix(txt, prefix):
    rv = re.findall(prefix + r' w{4-15}',txt)
    rv = [i.replace(prefix,'') for i in rv]
    return rv

但是,我得到了[]的回报。有人可以建议我如何使用 re 实现这一点吗?

在其他答案之上构建的是 1 行

>>> s = "My mother gave my sister my robot."
>>> import re
>>> prefix = "my"
>>> re.findall(prefix + r's+(w+)', s, re.IGNORECASE)
['mother', 'sister', 'robot']
>>> 

这里有几个问题,首先量词中的范围分隔符是逗号而不是连字符,所以:{4,15}而不是{4-15}

其次,你需要同时匹配myMy,所以匹配应该不区分大小写(re.IGNORECASE(。

第三,如果您使用带有finditer捕获括号组(圆括号(,则无需删除前缀。

试试这个:

import re
def suffix(txt, prefix):
    rv = []
    for m in re.finditer(prefix + r' (w{4,15})', txt, re.IGNORECASE):
        rv.append(m.groups()[0])
    return rv
print suffix("My mother gave my sister my robot.", "my")

给:

['mother', 'sister', 'robot']

根据需要,b(单词边界(可能比分隔单词的空间更好。 例如:"我的和你的,东西"使用空格不匹配。

由于@cdarke涵盖了您的问题的主要问题,另一种方法是将string拆分为带有 re.sub() 的单词列表,如果列表中的单词等于任何prefix的情况,请获取前一个单词并将其添加到结果列表中。

下面是一个示例:

import re
string = "My mother gave my sister my robot."
prefix = "my"
words = re.sub("[^w]", " ",  string).split()
suffixes = [words[i] for i in range(len(words)) if words[i-1].lower() == prefix]
print(suffixes)

哪些输出:

['mother', 'sister', 'robot']

备注:为了检查单词列表中的任何大小写是否与prefix匹配,您可以先将其转换为小写lower()

这就是你需要的地方 正面回顾 :

来吧:

import re
def find_suffix(word,string):
    pattern = '(?<=' + word + 's)w+'
    return re.findall(pattern,string)
print(find_suffix('my',"my mother gave my sister my robot."))

输出:

['mother', 'sister', 'robot']

最新更新