[英]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
將保留其內部匹配什么,以及$1
的fixstr
無論是由該組捕獲將取代。
我還對標點符號部分進行了一些修改,假設您想替換匹配項(如果碰巧是輸入中的最后一個單詞)(添加|$
)。 A |
字符類[]
是文字|
字符,因此我假設您實際上並不期望輸入中的字符將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.