2017-02-24 36 views
0

我使用的軟件部分內置的正則表達式實現不支持全球改性劑,所以我一定要得到它的工作,而不/ G正則表達式替換沒有可用的全球改性劑

我的測試字符串(可數是不受限制的:

AAA%2dbbb%2dccc%2dddd%2deee

我希望它是:AAA-BBB-CCC-DDD-EEE

通常我會寫(%2D)和g標誌並用 -

我設法寫這個匹配出現

的無限數量的

(\ W)((%2D)(\ w +))+

,但我有問題,替代規則,因爲我的第2組有2亞,我無法找出如何處理它們,

任何人都可以用替換規則幫助嗎?

+0

你在哪裏嘗試使用這個?因爲通常(例如在編輯器中)可能沒有全局修飾符,但是你仍然可以'替換所有' – Fallenhero

+0

它的應用程序,它有自己的內置愚蠢的正則表達式,沒有全局修飾符 – Drako

+0

它也很糟糕的文檔,所以我可以嘗試鍵入替換所有在一些猜測的方式感謝您的建議 – Drako

回答

0

由於評論最終達到了同樣的結論,我發佈問題之前,我決定發佈答案很好地關閉問題(而不是刪除問題,導致甚至否定的答案是答案,並可能爲某人節省一個小時或更多研究(實際上發生在我身上))。一般的結論是 - 用正則表達式解決這個問題是不可能的。我在這裏引用@ltux的兩條最佳評論:

此問題無法用正則表達式一次性解決。如果捕獲組與+等量詞一起使用,捕獲組的內容將始終是找到的最後一個匹配。在你的情況,第二個捕獲組的內容將是%2deee,你不能獲得%2dbbb,%2dccc等等,所以有機會,你要替換它。 - ltux 3天前

正則表達式解決不了你的問題。除非您告訴我們您正在使用哪種軟件,否則您必須自行繞過軟件的限制。 - ltux 3天前

+0

難道你不能像'urldecode'一樣使用類似'stringdecode'的字符串,它用短劃線'-'替換'%2d'? – Toto

0

創建包含要處理行類型的文件:

cat <<EOF>> abcde.txt 
aaa%2dbbb%2dccc%2dddd%2deee 
EOF 

使用此sed的片段使用你所提到的全局替換爲的方式如下,你通常執行這樣的替代。

sed -e "s#%2d#-#g" abcde.txt 
aaa-bbb-ccc-ddd-eee 

基本上你不必想想周圍出現空白字符,而是隻專注於白色空間本身的字符類型。多次替換這個角色會很簡單地解決你的問題。換句話說,你所關心的角色周圍的模式匹配是不必要的。這是我們很多人在處理正則表達式時遇到的常見問題。

基本上替代是說:找到一個白色空間「%2D」的第一次出現,有一個連字符替換「 - 」和重複的字符串的其餘部分。

+1

雖然這段代碼是受歡迎的,並且可能會提供一些幫助,但它會[如果包含解釋](/ meta.stackexchange.com/q/114762)* [* * * * * *爲什麼*問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

+0

如果您閱讀了我對原始問題的最後評論 - 這是我現在嘗試做的 - 在應用程序之前攔截該文件並重命名它,但不容易攔截;如果我得到這個文件,我知道有1000種方法來重命名它;但謝謝你試圖幫助。同樣的答案@Toto – Drako

+0

這仍然使用全局修飾符 – Alistra