2014-02-17 258 views
1

如果我有這樣的字符串: 「我喜歡數字3.142和2.」Python正則表達式從句尾刪除句號

我想刪除2之後但不是3.142中的那個,我該如何執行此操作?基本上,我如何檢查一段時間後的數字是否沒有數字後面的數字,以及如何刪除這段時間?謝謝。

+2

Google'Negative lookbehinds' :) – 2014-02-17 22:19:21

+2

'/(?<= \ d)\。(?!\ d)/' – Wrikken

+0

如果試圖在行尾刪除一段時間就是您之後的事情,那麼這個數字應該與它無關。如果試圖刪除沒有數字的句點,那麼這是另一回事。 – sln

回答

2
>>> import re 
>>> s = "I. always. like the numbers 3.142, 5., 6.12 and 2. Lalala." 

>>> re.sub('((\d+)[\.])(?!([\d]+))','\g<2>',s) 
'I. always. like the numbers 3.142, 5, 6.12 and 2 Lalala.' 
+0

如果你使用這個句子:''我喜歡數字3.142和2.和lalala。「'它將刪除最後一個點 - 它不應該。 – alfasin

+0

發現其中一種方法來解決它:)也許可以使它區分句子末尾的點,假設下一句總是從大寫字母或數字開始,但我猜可能有更多的角落案例。 – Ashalynd

1

如果你只是想在一個行的末尾刪除一個時期:

>>> import re 
>>> sentence = "I like the numbers 3.142 and 2." 
>>> re.sub(r'\.+$', '', sentence) 
'I like the numbers 3.142 and 2' 

如果你想刪除後面沒有數字的任何小數,使用負前瞻:

>>> re.sub(r'\.(?!\d)', '', sentence) 
'I like the numbers 3.142 and 2' 
+0

如果你非常直截了當地回答這個問題,但是OP要求第二個,但是我們不確定這是否始終如此:)。我認爲首先獲取更多細節比猜測答案要好。對於自己的答案仍然沒有問題:) – 2014-02-17 22:21:12

+2

現在它會從行中刪除點:「我有一隻貓,他的名字是約翰尼」 - >「我有一隻貓他的名字是約翰尼」。要求是當他們來到一個數字之後,並且沒有數字如下時,只刪除點:'\ d \。\ D' - >'\ d \。' – alfasin

+0

@alfasin OP想要「句子。」目前尚不清楚這是否是無意的行爲。 – GVH

0

在多線模式下,這應該起作用。在全球範圍內使用。
這將一次處理多行字符串。
它找到了最後一個時間段,使用可選的非換行符空白到行尾
使用向前斷言進行檢查。

查找:

\.(?=[^\S\r\n]*$) 

替換:""

+0

我寫給Ashalynd的同樣的評論適用於這個正則表達式。 – alfasin

+0

@alfasin - 抱歉的人,但直到他更改_TITLE_'正則表達式刪除句號從結尾的句號',我堅持這一點。 – sln

2

Wrikken寫在上面的評論很好的解決, 它消除了點,只有當談到一個數字後不跟一個數字:

import re 
sen = "I like the numbers 3.142 and 2. and lalala." 
p = re.compile("(?<=\d)(\.)(?!\d)") 
new_sen = p.sub("",sen) 
print (new_sen) #prints: I like the numbers 3.142 and 2 and lalala. 
相關問題