正则表达式仅在超过两位数字时才用空格分隔数字
本文关键字:数字 两位 分隔 空格 正则表达式 | 更新日期: 2023-09-27 18:32:36
>我有许多包含字母数字字符混合的字符串,例如:
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
以外的任何数字。
正则表达式101 演示#1
正则表达式#2:(?<='d)(?=('d|'w)(?='d|.))
说明:这个有一点变化。它通过查找一个位置(零宽度(来放置正则表达式指针,该位置前面是一个数字,后跟一个数字或除whitespaces
以外的任何内容。
正则表达式101演示 #2
现在剩下的唯一问题是匹配whitespaces
后跟有效案例。