簡體   English   中英

防止正則表達式吞噬比賽的可選部分

[英]Prevent Regex from devouring optional part of the match

我進行了廣泛的搜索,但找不到簡單的答案,因此我的Regex經驗有限。 我希望您能解釋一個簡單的解決方案。

我有一個很大的字符串,需要替換其中的某些單詞,如下所示:

示例:無論在哪里找到字符串“ LINK-ABC”,都將其設置為“ LINK_ABC”。

我寫了我的Regex匹配和替換字符串: @"LINK-ABC", @"LINK_ABC" ,它起作用了。

但是有些事情我還沒有意識到。 文件中可能有這樣的單詞:

LINK-ABC-DEF LINK-ABC-GHI-JKL ...等。

所以我得到“ LINK_ABC-DEF”等(這不是我想要的;應該保持不變...)

一旦我意識到了這個問題,似乎我真正想要的就是只識別被匹配的單詞,並在任何情況下將其與其他內容組合使用時保持不變。 在我看來,如果我在“匹配”字詞上檢查了空格或句號,就應該這樣做,所以...

@"LINK-ABC[ |\\.]",@"LINK_ABC"

...現在我迷迷糊糊了。

示例字符串:

link-xxx link-aaa-sss link-xxx-bbb link-xxx link-xxx。

匹配/替換字符串:

link-xxx[ |\\.],link_xxx

結果字符串:

link_xxxlink-aaa-sss link-xxx-bbb link_xxxlink_xxx

替換是正確的,但是尾部的逗號或句點已被“吞噬”,因此結果字符串錯誤。

有沒有一種我可以匹配的方法,如果它在空間上匹配,替換項將有一個空格,而如果在周期上匹配,替換項將有一個周期? 我假設我可以進行2場獨立比賽,但我想加深對Regex的理解,並在可能的情況下更優雅地進行。

您應該能夠通過“捕獲組”實現所需的行為

var matchstring = @"link-xxx([ \.]|$)";
var fixstr = @"link_xxx$1";

周圍的最后部分的括號matchstring將保留其內部匹配什么,以及$1fixstr無論是由該組捕獲將取代。

我還對標點符號部分進行了一些修改,假設您想替換匹配項(如果碰巧是輸入中的最后一個單詞)(添加|$ )。 A | 字符類[]是文字| 字符,因此我假設您實際上並不期望輸入中的字符將其刪除。

暫無
暫無

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

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