我有一个接受字符串和前缀字的函数。我想使用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?
答案 0 :(得分:2)
建立在其他答案之上的是1个班轮
@media (max-width:1024) {
li.user_login.user_dashboard {
display: none;
}
答案 1 :(得分:1)
这里有几个问题,首先是量词内的范围分隔符是逗号而不是连字符,因此:{4,15}
而不是{4-15}
。
其次,您需要匹配my
和My
,因此匹配应不区分大小写(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']