我有以下脚本转换组件。
public class ScriptMain : UserComponent
{
Regex findCOMMAexp, findAmpersandExp, findANDExp;
public override void PreExecute()
{
base.PreExecute();
//extract and compress publishers.
findANDExp = new Regex(@"(\w+\s*)+(?=\band\b)",RegexOptions.Compiled);
findCOMMAexp = new Regex(@"(\w+\s*)+[,]\s*(\w+\s*)",RegexOptions.Compiled);
findAmpersandExp = new Regex(@"(\w+\s*)+[&]\s*(\w+\s*)",RegexOptions.Compiled);
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.CompressedPublisher = compressPublisher(Row.F018Publisher);
}
public String compressPublisher(String str)
{
Match match;
if (str.Contains("/"))
{
return str.Substring(0, str.IndexOf(('/')));
}
else if ((match = findANDExp.Match(str)).Success)
{
return match.ToString();
}
else if ((match = findCOMMAexp.Match(str)).Success)
{
return Regex.Replace(str, ",", "");
}
else
{
return str;
}
}
}
3个Regex对象在主类中定义,在PreExecute()
中初始化,并在ProcessInputRow
调用的方法中使用。我有一个数据库源,它引入一个varchar(45)
字符串,定义为F018Publisher。我在10分钟后停止了这个任务,同时尝试解析9k条目。出了什么问题?
感谢。
答案 0 :(得分:1)
我将它包装到C#命令行应用程序中并将ABCDEFGHIJKLMOPQRSTUVWXYZ01234567890123456789作为参数传递给compressPublisher,它从未从此检查返回else if ((match = findANDExp.Match(str)).Success)
同样的评论也发布在推特上