2017-07-10 75 views
1

我試圖創建一個集合,它將包含用戶從字符串中查詢的所有單詞。在Python中檢查截斷的文本

# Step 1: Read the string 
instr = 'Lorem ipsum dolor sit amet, unde curabitur nonummy nonummy, cras dui eget, accumsan placerat nibh cumque vel augue, vitae laoreet at. Urna feugiat. Ut ante neque duis neque metus lectus. Neque rutrum tortor adipiscing omnis neque urna, diam vivamus. Pulvinar quis id, porta class felis enim vulputate, tempus arcu, sit porta. Nec praesent orci in, orci id duis purus ultrices, non sit vel. Cras ipsum nibh nulla suspendisse neque, mi dis, vestibulum a ipsum, morbi a curabitur porttitor sodales sit nullam, mus tristique feugiat vel per orci. Lacus elit molestie quam, ac nibh nulla in faucibus quis volutpat. Congue cum massa. Convallis in ultricies eget velit, erat elit eleifend.' 

text_lowercase = instr.lower() 
# Turn them in to set. Easy enough 
all_words = set(text_lowercase) 

# Step 2: Compare with the user's words: 
all_words & user_words 
# And those are the user's words that exist in the text. 

我的問題是

假設爲條件的用戶查詢,如lor*,或con*。 我希望能夠添加到我的set每一個字,開始與lorcon。從一個快速通過,我看到有像CongueConvallis這樣的詞。所以這2個應該被添加到集合中。

+1

您是否嘗試過打印'all_words'?我不認爲它在做你期望的。 – asongtoruin

+0

你到目前爲止嘗試過什麼?你應該發佈更多的代碼來展示你的努力,否則它看起來像你希望社區做你的功課。看看python字符串函數'split'和'startswith'。 – Risadinha

+0

是的,你可能需要拆分該字符串,然後將其更改爲一組來完成你的目標。但總的來說,你的問題的答案是學習如何使用[regex庫](https://docs.python.org/3/library/re.html) – Brionius

回答

1

您可以用eg替代*\w*,並使用像con*這樣的模式作爲正則表達式來搜索。

>>> word = "con*" 
>>> re.findall(word.replace("*", "\w*"), instr.lower()) 
['congue', 'convallis'] 
>>> word = "*val*is" 
>>> re.findall(word.replace("*", "\w*"), instr.lower()) 
['convallis'] 

您還可以附上的word.replace的結果\b...\b^...$(匹配拆分句子個別單詞時),考慮到字邊界。

>>> word = "l*" 
>>> re.findall(r"\b%s\b" % word.replace("*", "\w*"), instr.lower()) 
['lorem', 'laoreet', 'lectus', 'lacus'] 
2

你並不需要爲這個正則表達式,你可以使用列表理解與str.startswith()

[w for w in instr.split() if w.lower().startswith(('lor', 'con'))] 
# ['Lorem', 'Congue', 'Convallis'] 

或者因爲你的前綴始終是相同的長度,一個簡單的in檢查:

[w for w in instr.split() if w[:3].lower() in {'lor', 'con'}]