根据空格

时间:2017-01-16 22:56:31

标签: python python-3.x

所以我试图让函数工作,返回一个新的单个字符列表,紧跟其他两个给定的字符。像这样:

def filter_possible_chars(corpus, last):
    """
    >>> filter_possible_chars('lazy languid line', 'la')
    ['z', 'n']
    >>> filter_possible_chars('pitter patter', 'tt')
    ['e', 'e']
    """
    char_list = []
    corpus_split = corpus.split()
    for word in corpus_split:
        if last in word:
            word_split = word.split(last)
            follows_last = word_split[1]
            char_list.append(follows_last[0])
    return char_list

此函数适用于docstring中给出的示例,但是我需要包含包含空格的示例,例如:

>>> filter_possible_chars('when the goat jumped to the rock', ' t')

它会回来:

['h', 'o', 'h']

但由于我的功能显然正在删除空格,我认为我需要尝试一种完全不同的方法。我想过不将字符串拆分成单个单词并尝试使用给定的字母索引它,但我想不出一种方法可以使字符串中的多个实例工作。

2 个答案:

答案 0 :(得分:4)

>>> pat="tt"
>>> corpus="pitter patter"
>>> print(re.findall("%s(.)"%pat,corpus))
['e', 'e']
>>> corpus,pat = 'when the goat jumped to the rock', ' t'
>>> re.findall("%s(.)"%pat,corpus)
['h', 'o', 'h']
>>> corpus,pat = 'lazy languid line', 'la'
>>> re.findall("%s(.)"%pat,corpus)
['z', 'n']

解释

  • %string formatting运算符,因此例如"%s(.)" % "la"的计算结果为"la(.)"

  • regular expressions中,.是“任何字符”的模式,()定义,其值可以在以后检索,例如使用findall

      

    如果模式中存在一个或多个组,则返回组列表

因此,例如,模式la(.)表示“搜索la后跟任何字符,并捕获该字符”。

答案 1 :(得分:3)

你的想法如何解决这个问题是完全没问题的。您应该尝试在完整last中找到corpus的所有实例,而不是将句子拆分为单词。但是,嘿,实际上split函数可以为你做这个。

corpus = 'when the goat jumped to the rock'
spl = corpus.split(' t')
print spl
>> ['when', 'he goat jumped', 'o', 'he rock']
res = [x[0] for x in spl[1:] if len(x) > 0]
print res
>> ['h', 'o', 'h']

因此,您可以将corpus拆分为last,然后从没有第一个得到的所有字符串中获取所有字符串(因为它不是以last开头),然后从每个字符串获取第一个字母串。