2014-11-22 67 views
-1

假設您有大字符串的文件。我有一個匹配這些字符串子集的模式,比如一個子字符串。如何在匹配的模式(例如子串)之後顯示除去其他內容的所有字符串?這是正則表達式可能嗎?在匹配的模式後刪除其他所有內容

例如: 「這是一個討厭的字符串沒有人喜歡」

我的模式: 「討厭的字符串」

預期結果: 「這是一個討厭的字符串」

+0

你想在JS,PERL或其他語言中做到這一點? – 2014-11-22 00:45:30

+0

@Godisgood語言無關緊要,只要它使用正則表達式即可。 – 2014-11-22 00:47:36

回答

1

Perl語法(轉換爲您的語言標準)。

如果你想第一匹配您的子後,除去一切,那麼你可以使用非貪婪匹配:

s/(^.*?substring).*$/$1/

如果你想最後比賽結束後,除去一切,那麼通常貪婪的匹配就可以了:

s/(^.*substring).*$/$1/

剛用你的表達式替換子字符串。

1

您可以使用捕獲組和反向引用。

例如,在Javascript:

"this is one nasty string nobody likes".replace(/(nasty string).*$/, '$1') 
// => "this is one nasty string" 

或者,你可以使用正向後斷言,如果你正則表達式引擎支持它。

>>> # Python 
>>> import re 
>>> re.sub('(?<=nasty string).*$', '', "this is one nasty string nobody likes") 
'this is one nasty string' 
+0

感謝您提供關鍵詞「捕捉組」和「後退參考」,以便我可以去了解它是什麼。 – 2014-11-22 03:32:10

1

正則表達式不會刪除東西,它們只是匹配。你在比賽中所做的只是關於語言和手頭上的方法,在匹配的對象/環境/任何方面。所以,你想要的東西匹配RE是

/\A.*nasty string/ 

隨後又depennds的語言,在紅寶石它可以

/\A.*nasty string/.match(candidate)[0] 

(即返回所需要的字符串,而無需實際改變非破壞性的建設原來的)

相關問題