我对使用正则表达式还是个新手,根据我读过的一些教程,我无法在我的Regex.Replace中正确格式化这一步。
下面是我正在处理的场景...当我从列表框中提取数据时,我想将其格式化为类似CSV的格式,然后保存文件。使用“替换”选项是否是此场景的理想解决方案?
在正则表达式格式设置示例之前。
FirstName LastName Salary Position
-------------------------------------
John Smith $100,000.00 M
正则表达式替换后的建议格式
John Smith,100000,M
当前格式化状态输出:
John,Smith,100000,M
- 注意--有没有办法用空格替换第一个逗号?
我的代码片段
using(var fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write))
{
using(var sw = new StreamWriter(fs))
{
foreach (string stw in listBox1.Items)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(stw);
//Piecing the list back to the original format
sb_trim = Regex.Replace(stw, @"[$,]", "");
sb_trim = Regex.Replace(sb_trim, @"[.][0-9]+", "");
sb_trim = Regex.Replace(sb_trim, @"\s", ",");
sw.WriteLine(sb_trim);
}
}
}
5条答案
按热度按时间wj8zmpe11#
你可以用两个替换来完成
o3imoua42#
试试这个:
这是您将得到的最清晰的答案,至少对于正则表达式是这样。
(\D+)
:第一个捕获组。一个或多个非数字字符。\s+\$
:一个或多个空格字符,然后是文字美元符号($)。([\d,]+)
:第二个捕获组。一个或多个数字和/或逗号。\.\d+
:小数点,然后至少一个数字。\s+
:一个或多个空格字符。(.)
:第三个捕获组。任何非换行符。第二个捕获组还需要去掉逗号。你可以用另一个正则表达式来做这件事,但这真的是不必要的,而且对性能也不好。这就是为什么我们需要使用lambda表达式和字符串格式来拼凑替换。如果不是这样,我们可以用它来替换lambda表达式:
2nbm6dog3#
添加以下2行
如果sb_trim=John,Smith,100000,M,则上述代码将返回“John Smith,100000,M”
e37o9pze4#
这必须完成工作:
tct7dpnv5#
为了简单起见,您只需要currency中的一个数字。