[英]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));
我想出了這個
匹配任何數字后跟兩個數字,第二個數字后必須至少跟一個數字,然后是任何數字
更新:我的模式可以簡化為: (\\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
任何其他數字。
正則表達式2 : (?<=\\d)(?=(\\d|\\w)(?=\\d|.))
說明 :這個有一些變化。 它通過找到一個位置( 零寬度 )來放置正則表達式指針 ,位置前面有一個數字,然后是一個數字或除whitespaces
以外的任何其他whitespaces
。
現在剩下的唯一問題是匹配whitespaces
和有效案例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.