[英]Replacing a comma with Regex in C#
我遇到了一個非常簡單的問題,我想,我想在字符串中替換每個逗號',',除了被數字包圍的字符串。 例子:
hey, world -> hey,\nworld
hey , world -> hey,\nworld
they are simple, but now also:
hey,world -> hey,\nworld
hey),world -> hey),\nworld
(1,2) -> (1,2) << no change :P
我嘗試了不同的正則表達式,我無法讓它像我想的那樣輕松地工作。 匹配我需要的逗號很容易,但問題是我認為我可以這樣做:
Regex.Replace(input, @"[^\d]\s*,\s*[^\d]", ",\n");
它工作很酷,但它改變了我:
hey,world into: he,\norld
如果你能幫我解決這個問題,我會很高興:)
問候,安德魯
這使用負向lookbehind (?<!...)
和負向前瞻(?!...)
來檢查是否存在數字。
(?<![0-9])\s*,\s*|\s*,\s*(?![0-9])
這意味着:前面沒有數字或后面沒有數字。 所以唯一的失敗案例是:前面有數字AND后跟數字。
請注意\\d
與[0-9]
不同。 ԱԲԳԴԵԶԷԸԹ0123456789
是\\d
(和許多其他人)(他們是亞美尼亞數字 ),而0123456789
是[0-9]
我原來的正則表達式完全錯了! 因為它是:不是前面的數字而不是后跟數字,而請求是:非數字后面或后面沒有數字。
您需要使用前瞻只匹配逗號,而不是逗號前后的字符:
(?=[^\d]\s*),(?=\s*[^\d])
添加第二個示例中顯示的空格刪除:
(?=[^\d]\s*)[ ]*,[ ]*(?=\s*[^\d])
您的匹配包含您不想替換的字符,您應該使用負前瞻斷言和負后瞻斷言 。
這是一個很好的正則表達式網站。
@"(?<!\d)\s*,\s*(?!\d)"
上面的正則表達式將直接在它之前或之后替換逗號和任何空格。
嘗試用空字符串替換。
Regex.Replace(input, @"(?![0-9])\s*,\s*(?![0-9])", "");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.