python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串
1要提取大量燒成的一部分。有一個(gè)目標(biāo)詞和之前和之后單詞的數(shù)量上限。因此所提取的子必須包含單詞之前和之后它的上界目標(biāo)字一起。在之前和之后的部分可以包含少言,如果目標(biāo)字更接近文本的開頭或結(jié)尾。
進(jìn)行了串
"Lorem存有胡蘿卜,增強(qiáng)大學(xué)生開發(fā)者,但他們occaecat時(shí)間和活力,如勞動(dòng)力和肥胖。多年來來,誰nostrud鍛煉,學(xué)區(qū)工作,除非他們aliquip優(yōu)勢(shì)來自它。作業(yè)如果cupidatat消費(fèi)者找到樂趣想成為一名足球cillum他要躲避痛苦,不會(huì)產(chǎn)生任何結(jié)果。excepteur cupidatat黑人就不是excepteur,是舒緩的靈魂,那就是,他們拋棄了那些誰是責(zé)怪你的煩惱的一般責(zé)任。"
目標(biāo)的話,工作
words_before:5
words_after:2
應(yīng)該返回['veniam, quis nostrud exercitation ullamco laboris nisi ut']
1個(gè)思想幾個(gè)可能的模式,但沒有一次成功。 1猜它也可以通過簡(jiǎn)單地遍歷發(fā)射前,從目標(biāo)背單詞做。不過正則表達(dá)式肯定會(huì)令事情變得更容易。任何幫助,將不勝感激。
感謝所有的答案。 所有這些都按預(yù)期工作。 正則表達(dá)式對(duì)我來說最方便,因?yàn)槲业淖址刑畛淞朔亲帜缸址?#xff01;
如果要拆分單詞,可以使用slice()和split()功能。 例如:
>>> text ="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qu
is nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.".split()
>>> n = text.index('laboris')
>>> s = slice(n - 5, n + 3)
>>> text[s]
['veniam,', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'ut']
If you still want regex....
def find_context(word_, n_before, n_after, string_):
import re
b= '\w+\W+' ?* n_before
a= ?'\W+\w+' * n_after
pattern = '(' + b + word_ + a + ')'
print(re.search(pattern, string_).groups(1)[0])
find_context('laboris', 5, 2, st)
veniam, quis nostrud exercitation ullamco laboris nisi ut
find_context('culpa', 2, 2, st)
sunt in culpa qui officia
這似乎總是會(huì)給出5個(gè)之前和之后的2個(gè)。 我認(rèn)為OP需要前后任意數(shù)字。 或者它實(shí)際上只是5或2?
@idjaw我做了一個(gè)更改,現(xiàn)在它是一個(gè)函數(shù),可以輸入?yún)?shù)值。
您也可以使用nltk和它的"一致"方法來接近它,受到Calling NLTK的一致性的啟發(fā) - 如何在使用的單詞之前/之后獲取文本?:
A concordance view shows us every occurrence of a given word, together
with some context.
import nltk
def get_neighbors(input_text, word, before, after):
text = nltk.Text(nltk.tokenize.word_tokenize(input_text))
concordance_index = nltk.ConcordanceIndex(text.tokens)
offset = next(offset for offset in concordance_index.offsets(word))
return text.tokens[offset - before - 1: offset] + text.tokens[offset: offset + after + 1]
text = u"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
print(get_neighbors(text, 'laboris', 5, 2))
在目標(biāo)詞之前打印5個(gè)單詞/令牌,在之后打印2個(gè):
[u'veniam', u',', u'quis', u'nostrud', u'exercitation', u'ullamco', u'laboris', u'nisi', u'ut']
總結(jié)
以上是生活随笔為你收集整理的python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2k11补丁php,【西乙】西班牙人4比
- 下一篇: 二本 计算机专业2017分数线,2017