[英]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.