c#中的正则表达式替换

本文关键字:替换 正则表达式 | 更新日期: 2023-09-27 18:10:02

我对使用正则表达式相当陌生,而且,根据我读过的一些教程,我无法在我的Regex中获得这一步。替换正确的格式

这是我正在研究的场景…当我从列表框中提取数据时,我想将其格式化为类似CSV的格式,然后保存该文件。对于这种情况,使用Replace选项是理想的解决方案吗?

前面的正则表达式格式化示例。

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);
        }
    }
}

c#中的正则表达式替换

您可以使用两个替换

//let stw be "John Smith $100,000.00 M"
sb_trim = Regex.Replace(stw, @"'s+'$|'s+(?='w+$)", ",");
//sb_trim becomes "John Smith,100,000.00,M"
sb_trim = Regex.Replace(sb_trim, @"(?<='d),(?='d)|[.]0+(?=,)", "");
//sb_trim becomes "John Smith,100000,M"
sw.WriteLine(sb_trim);

试试这个::

sb_trim = Regex.Replace(stw, @"('D+)'s+'$(['d,]+)'.'d+'s+(.)",
    m => string.Format(
        "{0},{1},{2}",
        m.Groups[1].Value,
        m.Groups[2].Value.Replace(",", string.Empty),
        m.Groups[3].Value));

这是你能得到的最简洁的答案,至少对于正则表达式来说。

  • ('D+):第一个捕获组。一个或多个非数字字符。
  • 's+'$:一个或多个空格字符,然后一个美元符号($)。
  • (['d,]+):第二捕获组。一个或多个数字和/或逗号。
  • '.'d+:小数点,然后至少一个数字。
  • 's+:一个或多个空格字符
  • (.):第三捕获组。任何非断行字符。

第二个捕获组还需要去掉逗号。您可以使用另一个正则表达式来完成此操作,但这确实是不必要的,并且对性能不利。这就是为什么我们需要使用lambda表达式和字符串格式来拼凑替换。如果不是这样,我们可以用这个来代替lambda表达式:

"$1,$2,$3"

添加以下两行

var regex = new Regex(Regex.Escape(","));
sb_trim = regex.Replace(sb_trim, " ", 1);

如果sb_trim= John,Smith,100000,M上述代码将返回"John Smith,100000,M"

这个必须完成任务:

var result=Regex.Replace("John      Smith    $100,000.00  M", @"^('w+)'s+('w+)'s+'$(['d,'.]+)'s+('w+)$","$1,$2,$3,$4");
//result: "John,Smith,100,000.00,M"

为简单起见,只需要货币中的一个数字。

Regex.Replace(yourcurrency, "[^0-9]","")