2016-02-26 51 views
0

問題正則表達式是:與Python

寫腳本讀取一個文本文件,它分爲句子, 打印屏幕,一前一後的句子。不要使用 庫來爲你分句。

以下是我的代碼:

import re 
fr=open('input.txt') 
text=fr.read().strip() 
fr.close() 
Ms=re.finditer(' +([A-Z].+?\.) ',text) 
for i in Ms: 
    print i.group(1) 

結果顯示什麼。其實我知道什麼可能是錯誤的,因爲文件的第一句沒有多個空格,但我無法弄清楚如何解決它。

以下是我輸入:

二甲雙胍將在6-8周內達到完全的效力。它有三個主要的影響(http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action)。

首先,它(經常)減少肝臟產生的血糖量,這大概會減少你的基礎需求,並幫助你的禁食數字。其次,二甲雙胍增加胰島素,導致胰島素敏感性增加的信號傳導:http://care.diabetesjournals.org/content/27/1/281.full。 效果主要是對你身體的肌肉質量。胰島素抵抗也影響其他各種物質,但胰島素最大的用途是攝入葡萄糖到肌肉。第三,二甲雙胍降低消化過程中葡萄糖的吸收。正是這種效應我認爲會導致一些胃部問題。

+0

你有沒有做任何調試?有什麼結果?文件中有*是什麼? – jonrsharpe

+0

runfile('C:/Users/Air/Desktop/660/week6/assignment.py',wdir ='C:/ Users/Air/Desktop/660/week6')只是沒有顯示出來。 –

+1

這只是運行它,而不是調試它。請給[mcve]。 – jonrsharpe

回答

1

假設文件input.txt有以下內容:

二甲雙胍在6-8周內將達到完全有效。它有三個主要的影響(http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action)。

首先,它(經常)減少肝臟產生的血糖量,這大概會減少你的基礎需求,並幫助你的禁食數字。其次,二甲雙胍增加胰島素,導致胰島素敏感性增加的信號傳導:http://care.diabetesjournals.org/content/27/1/281.full。效果主要是對你身體的肌肉質量。胰島素抵抗還影響其他各種物質,但胰島素最大的用途是攝入葡萄糖到肌肉。第三,二甲雙胍降低消化過程中葡萄糖的吸收。正是這種效應我認爲會導致一些胃部問題。

下面是代碼:

import re 
with open('input.txt','r') as f: fin = f.read() 
print re.sub('\.\s+', '.\n', fin) 

輸出:

Metformin will reach full effectiveness in 6-8 weeks. 
It has three primary effects (http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action). 
First, it (frequently) reduces the amount of blood sugar produced by your liver, this presumably will decrease your basal needs and help your fasting numbers. 
Second, metformin increases the insulin, signaling resulting in increased insulin sensitivity: http://care.diabetesjournals.org/content/27/1/281.full. 
The effect is primarily on the muscle mass in your body. 
Insulin resistance also affects all kinds of other stuff, but the biggest utilization of insulin is in the uptake of glucose to muscles. 
Third, Metformin decreases the absorption of glucose during digestion.It is this effect that I believe causes some of the gastric issues. 

一句話不解析正確的,因爲格式較差的(缺少兩個句子之間有一個空格),應在文本文件中修復。

UPDATE話雖這麼說,請嘗試用文本文件不變如下:

import re 
with open('input.txt','r') as f: fin = f.read() 
print re.sub('\.\s*([A-Z])', '.\n\g<1>', fin) 
+0

謝謝,先生 –

+0

最後兩句話還是有問題,因爲最後兩句之間沒有空格,所以不能分開 –

+0

@中揚聲:剛剛更新。 – Quinn

0

試試這個:

import re 

with open('input.txt', 'r') as f: 
    data = f.read() 

print('\n'.join(re.split(r'\n', data, re.M))) 
1

這很難,沒有看到您輸入的內容發表評論,但請注意,你需要小心開頭和結尾的空格。在下面的示例中,第一個單詞由於沒有前導空格而被忽略,如果您需要尾部空格,則會丟失第二個單詞。

>>> text = "See Spot run. Run, Spot, run." 

>>> re.findall(' +([A-Z].+?\.)',text) 

['Spot run.',' Run, Spot, run.'] 

>>> re.findall(' +([A-Z].+?\.) ',text) 

['Spot run. '] 

我們可以用字符類略好做,但你需要決定句子究竟如何界定。

>>> re.findall('([\w, ]+\.)',text) 

['See Spot run.', ' Run, Spot, run.'] 

>>> re.findall('[^.]+\.',text) 

['See Spot run.', ' Run, Spot, run.'] 

但在一個時期分裂在許多情況下失效,比如在你的榜樣輸入URL,或執行以下操作:

>>> re.findall('[^.]+\.',"See Dr. Spock run. Run, Spock, run.") 

['See Dr.', ' Spock run.', ' Run, Spock, run.'] 
+0

謝謝你,先生,我的輸入內容已經添加在屏幕上 –