c#.net正则表达式删除某些非ascii字符不起作用

时间:2016-07-01 22:48:33

标签: c# regex unicode ssis

我是.net的新手,我在SSIS中使用脚本任务。我正在尝试将文件加载到具有如下所示字符的数据库。这看起来像是从word中复制的数据 - 已转向 -

示例文字: 更正 - 春季促销2016

Notepad ++显示: Sample text

我在.net脚本WHERE id = 1中使用了正则表达式,但即使它落在范围内也会被替换掉。我不希望这些字符被改变。我在这里缺少什么?

如果我不替换,我会收到截断错误,因为我相信这些字符的大小会超过一点。

修改:我添加了示例行。前两行有问题,最后两行没问题。

[^\x00-\x7F]

好长周末:)我开始认为这是由于代码页错误造成的。加载平面文件时的确切错误消息如下所示。

错误:数据转换失败。 “NAME”列的数据转换返回状态值4,状态文本“文本被截断,或者目标代码页中的一个或多个字符不匹配。”。

这就是我在ssis包中所做的。

  1. 验证平面文件的脚本任务。
    • 影响文件内容的唯一验证是检查文件中分隔列的数量与该文件的分配数量相同。我需要读取每一行(如果有一个额外的管道分隔符(用户条目),从文件中删除该行并将其记录到自定义表中)。
    • 使用StreamWriter类,我将所有有效行写入临时文件,并在末尾重命名/移动文件。
    • 道歉,但我刚刚注意到这个过程将上面所有这些行改为这样的。
  2.   

    记事本:更正 春季促销2016

    如何停止执行此脚本任务? (这应该是解决方案)

    如果这不容易,选项2是...... 我的连接管理器是平面文件源和OLEDB目标。 OLEDB使用默认代码页 1252 。如果这些字符在代码页1252中不匹配,我应该使用什么?没有更改代码页,还有其他解决方法吗?

    脚本任务:

    123|NA|0|-.10000|Correction – Spring Promo 2016|.000000|gift|2013-06-29
    345|NA|1|-.50000|Correction–Spring Promo 2011|.000000|makr|2012-06-29
    117|ER|0|12.000000|EDR - (WR) US STATE|.000000|TEST MARGIN|2016-02-30
    232|TV|0|.100000|UFT / MGT v8|.000000|test. second|2006-06-09
    

    非常感谢你。

1 个答案:

答案 0 :(得分:1)

我不清楚你打算做什么,因为“我不希望这些字符被改变”似乎是互斥的,“它们必须被替换以避免截断”。我需要查看代码以便为您提供进一步的建议。

一般情况下,我建议您首先在代码之外测试正则表达式模式。我通常使用http://regexr.com

如果您想匹配您的特殊字符: Matching Your Special Characters

如果您想匹配除特殊字符以外的任何内容: Matching Non-Special Characters