簡體   English   中英

正則表達式替換捕獲組中的所有斜杠

[英]RegEx replace all slashes in capture group

我有一個 html 數據列表,其結構如下所示

<div>lots of other data...
    <a href="http://localserver1/OpenFile?path=Test1%2FSubFolder%2Ffile1.pdf&OtherParam=1">Test1</a>
</div>
<div>lots of other data...
    <a href="http://localserver1/OpenFile?path=Test1/Subfolder/file2.pdf&OtherParam=2
</div>
<div>lots of other data...
    <a href="http://localserver1/OpenFile?path=Test2%2FSubfolder%2Ffile3.pdf&OtherParam=3
</div>

正如您在第二個網址中看到的,斜杠中沒有編碼。 這些鏈接與內容管理系統(一個公認的壞系統)接口,並且我們經常得到未編碼的路徑。 我想用 C# 編寫一小段代碼來檢查這里的 html 代碼塊是否有斜杠,然后用 %2F 編碼替換它們。 我已經能夠找到所有出現 OpenFile 鏈接的實例,如下所示:

OpenFile\?path=(.*)&

但是,我似乎找不到一種簡單的方法來查看路徑的捕獲​​組並僅替換其中的斜杠。 我該怎么做呢?

由於您的示例使用“&”作為模式的結尾,我將假設它在所有情況下都是一致的。

你可以使用這個表達式:

\/(?!.*OpenFile\?path=)(?=.*&)

https://regex101.com/r/hZ3Oja/1

這在“OpenFile?path=”上使用負前瞻,在“&”上使用正前瞻,因此它只替換作為內部路徑一部分的斜杠。

您的 c# 語法看起來像 Regex.Replace(input, pattern, replacement);

在 C# 中,您可以使用環視來匹配正斜杠:

(?<=OpenFile\?path=[^\s&]*)/(?=[^\s&]*&)

解釋

  • (?<=OpenFile\?path=[^\s&]*)正向向后看,將 openfile 部分斷言到左側,后跟可選的非空白字符,不包括&
  • /匹配正斜杠
  • (?=[^\s&]*&)正向前瞻,在右邊斷言一個 &

正則表達式演示

如果右側也可能存在沒有 & 符號的匹配項,則可以省略模式中最后一個正向前瞻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM