簡體   English   中英

正則表達式僅在兩個以上的數字時用空格分隔數字

[英]Regex to separate digits with spaces only if there are more than two digits

我有一些包含字母數字字符混合的字符串,例如:

10
1234
123-t123b-+1
ff 8765 12

我想用空格分隔數字,但前提是彼此之間有三個或更多數字。 因此,以上示例將變為:

10
1_2_3_4
1_2_3-t1_2_3b-+1
ff 8_7_6_5 12

(為清楚起見,添加了帶下划線的空格)。 是否存在可以處理此問題的正則表達式,或者我需要以編程方式進行此處理?

我認為您需要這樣的東西:

var text = "10" + Environment.NewLine + 
           "1234" + Environment.NewLine + 
           "123-t123b-+1" + Environment.NewLine + 
           "ff 8765 12";

var regex = new Regex(@"\d{3,}");
var replacedText = regex.Replace(text, match => string.Join<char>(" ", match.Value));

不確定C#是否支持\\G但是嘗試此模式

\B(?=\d{2})|(?<!^)\G(?=\d)

演示版


這是我不使用\\G第二種模式

(?<=\d)(?=\d\d)|(?<=\d\d)(?=\d)

演示版
說明:

(?<=\d)(?=\d\d)     # 0-width after 1 digit and before 2 digits ie 1^234 or 12^34  
|                   # or  
(?<=\d\d)(?=\d)     # 0-width after 2 digits and before 1 digit ie 12^34 or 123^4

我想出了這個

匹配任何數字后跟兩個數字,第二個數字后必須至少跟一個數字,然后是任何數字

更新:我的模式可以簡化為: (\\d(?=\\d{2})\\d+)

class Program
{
    static void Main(string[] args)
    {

        string pattern = @"(\d(?=\d{2})\d(?=\d)\d+)";
        string content = "10" + Environment.NewLine +
                         "1234" + Environment.NewLine +
                         "123 - t123b - +1" + Environment.NewLine +
                         "ff 8765 12";

        var reg = new Regex(pattern);
        var replacedText = reg.Replace(content, match => string.Join<char>(" ", match.Value));

        Console.WriteLine(replacedText);

        Console.ReadLine();
    }


}

到目前為止,使用純正則表達式可以成功找到位置並用space代替,除非最后一位數字后跟whitespace 這是我的解決方案,但已接近標准。 如果您希望投票,請提供一些解決方案的建議。

正則表達式1(?<=\\d)(?=(\\d)(?=\\d|.))

說明 :放置正則表達式指針的方法是先找到一個位置( 零寬度 ),然后再放置一個數字和一個數字。 后面的數字右邊的 )后面應加上一個數字或除whitespaces任何其他數字。

Regex101演示#1


正則表達式2(?<=\\d)(?=(\\d|\\w)(?=\\d|.))

說明 :這個有一些變化。 它通過找到一個位置( 零寬度 )來放置正則表達式指針 ,位置前面有一個數字,然后是一個數字或除whitespaces以外的任何其他whitespaces

Regex101演示#2

現在剩下的唯一問題是匹配whitespaces和有效案例。

暫無
暫無

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

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