假設您有大字符串的文件。我有一個匹配這些字符串子集的模式,比如一個子字符串。如何在匹配的模式(例如子串)之後顯示除去其他內容的所有字符串?這是正則表達式可能嗎?在匹配的模式後刪除其他所有內容
例如: 「這是一個討厭的字符串沒有人喜歡」
我的模式: 「討厭的字符串」
預期結果: 「這是一個討厭的字符串」
假設您有大字符串的文件。我有一個匹配這些字符串子集的模式,比如一個子字符串。如何在匹配的模式(例如子串)之後顯示除去其他內容的所有字符串?這是正則表達式可能嗎?在匹配的模式後刪除其他所有內容
例如: 「這是一個討厭的字符串沒有人喜歡」
我的模式: 「討厭的字符串」
預期結果: 「這是一個討厭的字符串」
Perl語法(轉換爲您的語言標準)。
如果你想第一匹配您的子後,除去一切,那麼你可以使用非貪婪匹配:
s/(^.*?substring).*$/$1/
如果你想最後比賽結束後,除去一切,那麼通常貪婪的匹配就可以了:
s/(^.*substring).*$/$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'
感謝您提供關鍵詞「捕捉組」和「後退參考」,以便我可以去了解它是什麼。 – 2014-11-22 03:32:10
正則表達式不會刪除東西,它們只是匹配。你在比賽中所做的只是關於語言和手頭上的方法,在匹配的對象/環境/任何方面。所以,你想要的東西匹配RE是
/\A.*nasty string/
隨後又depennds的語言,在紅寶石它可以
/\A.*nasty string/.match(candidate)[0]
(即返回所需要的字符串,而無需實際改變非破壞性的建設原來的)
你想在JS,PERL或其他語言中做到這一點? – 2014-11-22 00:45:30
@Godisgood語言無關緊要,只要它使用正則表達式即可。 – 2014-11-22 00:47:36