簡體   English   中英

在C#中用Regex替換逗號

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

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