2015-03-17 2 views
2

Что будет функцией f на основе регулярных выражений, которая, учитывая входной текст и строку, возвращает все слова, содержащие эту строку в тексте. Например:Python regexes: возвращает список слов, содержащих заданную подстроку

f("This is just a simple text to test some basic things", "si") 

вернется:

["simple", "basic"] 

(потому что эти два слова содержат подстроку "si")

Как сделать это?

+0

Что делать, если строка содержит специальные символы? – thefourtheye

+0

Что он должен вернуть для «Это простой базовый тест некоторых основных вещей» или «Это простой, базовый тест некоторых основных вещей»? –

+0

'filter ((lambda word: подстрока в слове), text.split())'? – Bakuriu

ответ

2

Я не убежден, что это не лучший способ сделать это, чем мой подход, но что-то как:

import re 

def f(s, pat): 
    pat = r'(\w*%s\w*)' % pat  # Not thrilled about this line 
    return re.findall(pat, s) 


print f("This is just a simple text to test some basic things", "si") 

работы:

['simple', 'basic'] 
1

Для чего-то вроде этого я бы не использовать регулярное выражение, я хотел бы использовать что-то вроде этого:

def f(string, match): 
    string_list = string.split() 
    match_list = [] 
    for word in string_list: 
     if match in word: 
      match_list.append(word) 
    return match_list 

print f("This is just a simple text to test some basic things", "si") 
0

Вот моя попытка решения. Я разделил строку ввода на «", а затем попытаюсь сопоставить каждое отдельное слово с шаблоном. Если совпадение найдено, слово добавляется в результирующий набор.

import re 

def f(str, pat): 
    matches = list() 
    str_list = str.split(' '); 

    for word in str_list: 
     regex = r'' + re.escape(word) 
     match = re.search(regex, word) 
     if match: 
      matches.append(word) 
    return matches 

print f("This is just a simple text to test some basic things", "si") 
0
import re 
def func(s, pat): 
pat = r'\b\S*%s\S*\b' % re.escape(pat) 
return re.findall(pat, s) 


print f("This is just a simple text to test some basic things", "si") 

Вам это нужно. \b будет вынимать только слова, вырезая на границе слова. \S не выбирает space.

Смежные вопросы