2014-01-29 40 views
2

我想要一個搜索字符串的所有匹配項http並刪除整個鏈接的公式。例如:刪除以某些字符開頭的整個單詞的公式

This is the best story ever http://www.usatoday.com make sure to read it twice. http://www.usatoday.com/image.jpg 

將成爲:

This is the best story ever make sure to read it twice. 

從我讀過,這應該這樣做:

=TRIM(LEFT(A1,FIND("http",A1)-1))&RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND("http",A1))+1) 

,但我仍然得到#VALUE!

我希望能夠讓代碼在字符串中的任意位置找到URL。另外,如果找不到網址,我只想重印原始字符串。

任何想法?

+0

如果您只想涵蓋句子結尾的可能性,那麼您公式的縮寫版應該足夠了:'= LEFT(A1,FIND(「http」,A1)-2)' – pnuts

+0

+ 1好問題。幾乎讓我感到困惑:) –

回答

4

請嘗試:

=TRIM(REPLACE(A1,FIND("http://",A1),IFERROR(FIND(" ",A1,FIND("http://",A1)),LEN(A1)+9)-FIND("http://",A1)+1,"")) 

如果你正在尋找不只是在句末刪除網址。

IMO從@Siddharth Rout編輯以下提供了比上述更好的解決方案。


非VBA /非公式法

  1. 按CTRL + H^帶來Find And Replace對話框。
  2. Find What中,輸入「http:// *」,不帶引號。注意*
  3. 保留Replace With爲空。
  4. 點擊Replace All
  5. 現在在Find What中,輸入「http:// *」不帶引號。注意,這裏之後*
  6. 沒有空間保持Replace With
  7. 點擊Replace All

和你做。

+0

僅刪除第一次出現的鏈接。我正在尋找刪除所有鏈接。 –

+0

是的,它會是2,3最大。你什麼意思?只是在不同列上做相同公式的幾次迭代? –

+0

鑑於公式的長度已經是我會這樣做的方式。順便說一下,它比我們需要的時間稍長(至少!) - 我承認當另一個A已經被接受了,我沒有理會'優化'! – pnuts

1

試試這個:

=TRIM(MID(A1,1,SEARCH("http",A1)-1)) 

沒有辦法測試,所以我把它留給你。

+0

完美。什麼是MID/-1在這裏做什麼? –

+0

'Search'返回'http'的位置。減去1分,Mid'函數的長度將返回。它將包括空間,但'修剪'將照顧它。 – L42

+2

當url位於字符串中間或開始時它不起作用:'我每天訪問http://stackoverflow.com,所以我認爲它接受這個答案太快了,因爲它只滿足一個條件 – vladkras

2

您可以創建自己的公式以在Excel中使用正則表達式表達式。

  1. 在Excel中打開Visual Basic編輯器
  2. 轉到Tools > References... enter image description here
  3. 檢查Microsoft VBScript Regular Expressions 1.0 enter image description here
  4. Microsoft VBScript Regular Expressions 5.5 enter image description here
  5. 然後在左窗格中右鍵單擊您的VBAProject (Book1.xlsx) enter image description here
  6. Insert > Module
  7. 粘貼此代碼

    Public Function RgxReplace(aregexp As String, _ 
    astring As Range, _ 
    areplace As String) As String 
    Dim re As RegExp 
    Set re = New RegExp 
    re.Pattern = aregexp 
    RgxReplace = re.Replace(astring, areplace) 
    End Function 
    
  8. 並保存

現在yoг有一個新的公式列表

enter image description here 您可以使用正則表達式替換字符串使用模式。你的情況,這將是 enter image description here

(特別感謝vdasus

+0

加上一個細節。 :) – L42

+0

僅限PC。它區分大小寫,所以它必須是\ S + \ S這隻會取代第一次出現的鏈接。無論如何修改表達式來獲取字符串中的所有事件?即帶有兩個超鏈接的字符串 –

+0

@ ChrisJ.Vargo,1.「僅限PC」? - 僅限Excel。 2.「區分大小寫,所以需要\ S + \ S」? - '\ s'代表最後一個空格,'\ S +'代表'http://'之後的前一個非空格字符(請閱讀[參考](http://msdn.microsoft.com/en-us/) library/az24scfc(v = vs.110).aspx)first)3.「這隻替換了第一次出現的鏈接」? - VBScript的'Replace()'必須替換所有匹配 – vladkras

相關問題