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

时间:2018-01-19 16:14:18

标签: python regex prefix suffix

我有一个接受字符串和前缀字的函数。我想使用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?

4 个答案:

答案 0 :(得分:2)

建立在其他答案之上的是1个班轮

@media (max-width:1024) {
li.user_login.user_dashboard {
display: none;
}

答案 1 :(得分:1)

这里有几个问题,首先是量词内的范围分隔符是逗号而不是连字符,因此:{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(单词边界)可能比分隔单词的空格更好。例如:“我和你的东西”与空格不匹配。

答案 2 :(得分:0)

由于@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()将其转换为小写。

答案 3 :(得分:0)

你需要积极观察的地方:

我们走了:

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']