我有一些包含字母数字字符的字符串,例如:
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
(为了清晰起见,添加了带有下划线的空格)。是否有可以处理此问题的正则表达式,还是我需要以编程方式执行此操作?
答案 0 :(得分:3)
我认为你需要这样的东西:
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));
答案 1 :(得分:0)
不确定C#是否支持\G
但尝试此模式
\B(?=\d{2})|(?<!^)\G(?=\d)
这是我的第二种模式,没有使用\G
(?<=\d)(?=\d\d)|(?<=\d\d)(?=\d)
Demo
解释:
(?<=\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
答案 2 :(得分:0)
我想出了这个
匹配任意数字后跟两个数字,第二个数字必须后跟至少一个数字和之后的任何数字
更新:我的模式可以缩短为:(\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();
}
}
答案 3 :(得分:0)
到目前为止,使用纯正则表达式我已经成功找到位置并替换为space
,除非最后一位数后跟whitespace
。这是我的解决方案,虽然接近但是达到了标准。如果您希望 downvote ,请在解决方案方面提供一些建议。
正则表达式#1 :(?<=\d)(?=(\d)(?=\d|.))
解释:它通过查找前面有数字并后跟数字的位置(零宽度)来放置正则表达式指针。 后期数字(右一个)后面应跟一个数字或whitespaces
以外的任何数字。
正则表达式#2 :(?<=\d)(?=(\d|\w)(?=\d|.))
解释:这个有一点变化。它通过找到一个以数字开头的位置(零宽度)并后跟一个数字或除whitespaces
以外的任何其他位置来放置正则表达式指针。
现在唯一的问题是匹配whitespaces
后跟有效案例。