Tag: 解析

使用Filehelpers处理DelimitedRecord中的NEWLINE

我使用优秀的FileHelpers库来解析许多不同的文件。 其中一个文件有(某些)看起来像这样的行 id|name|comments|date 01|edov|bla bla bla bla|2012-01-01 02|john|bla bla bla bla|2012-01-02 03|Pete|bla bla bla bla|2012-03-01 04|Mary|bla bla bla bla|2012-01-01 请注意,ID为3的行在文本中有换行符。 另请注意,注释不包含引号,因此[FieldQuoted(‘”‘, MultilineMode.AllowForRead)]不会保存我。 Filehelpers在第4行抛出exception: 分隔符’|’ 字段“注释”后找不到(记录字段较少,分隔符错误或下一个字段必须标记为可选)。 无论如何我可以用FileHelpers解析这个文件吗?

使用DateTime.TryParseExact解析非标准日期格式

嗨我试图解析日期字符串,如“1012012”,“2012年1月1日”。 阅读Api它说使用d,%d,其中日期没有前导0.不能让它适用于像“1012012”这样的日期 试图用“d MMM YYYY”作为“2012年1月1日”,我怎么用’st’,’th’有效? using System; using System.IO; using System.Globalization; namespace test { class Script { static public void Main(string [] args) { //String dateString = “9022011”; // q1 String dateString = “9th February 2011”; //q2 System.DateTime date = DateTime.MinValue; string[] format = { “ddMMyyyy”, “d MMM yyyy” }; // what would be the […]

从任意纯文本中提取特定标记

我想解析纯文本注释并查找其中的某些标记。 我正在寻找的标签类型如下: 其中“name”是[az]字符串(来自固定列表),“1234”表示[0-9] +数字。 这些标记可以在字符串中出现零次或多次,并被任意其他文本包围。 例如,以下字符串都是有效的: “Hello world!” “!” “1 < 2” “++ and also.\n\nBy the way, maybe ” 以下字符串均无效: “1 < 2" "” “” “Hello ” 最后一个无效,因为“notinfixedlist”不是受支持的命名标识符。 我可以使用简单的正则表达式轻松解析它,例如(为简单起见,我省略了命名组): 或直接指定固定列表: 但是我想使用antlr有几个原因: 我想要任何与该格式不匹配的结果导致解析错误,因此如果文本包含“”但与模式不匹配,则失败。 必须将这些字符转义为“&lt;” 和“&gt;” 分别如果它不是标签。 我可能会在将来扩展它以支持其他类型的模式(例如:“{foo + 666}”或“[[@ 1234]]”并且希望避免爆发正则表达式语句。拥有单个语法文件我可以延伸会很棒。 我喜欢这样的事实:antlr4实现了访问者模式,当遇到特定类型的标记时我的代码被调用,而不是必须破解不同的正则表达式。 如何使用antlr4实现这样的语法? 我见过的大多数例子都是针对整个文本的精确规则的语言,而我只希望语法适用于任意文本中的匹配模式。 我想出了这个,我认为是正确的: grammar Tags; parse : ( tag | text )* ; tag : […]

解析重复行的特定实例的分隔数据

我有一个以下格式的字符串数组,其中每个字符串以一系列三个字符开头,表示它包含的数据类型。 例如: ABC | ….. DEF | … RHG | 1 …….. RHG | 2 …….. RHG | 3 …….. XDF | …… 我想找到任何重复的行(本例中为RHG)并用特殊字符标记最后一行: > RHG | 3 ……… 最好的方法是什么? 我当前的解决方案有一个方法来计算行标题并创建一个带有标题计数的字典。 protected Dictionary CountHeaders(string[] lines) { Dictionary headerCounts = new Dictionary(); for (int i = 0; i < lines.Length; i++) { string s = lines[i].Substring(0, […]

解析格式奇怪的DateTime。 有人喜欢加紧吗?

我正在尝试解析一个日期戳(我从Twitter获得),但我收到了错误。 这是日期戳: 2010年8月27日星期五22:00:07 +0000 这是我的代码: DateTime.ParseExact(MyDateValue,“ddd,dd MMM YYYY HH:mm:ss + ffff”,new CultureInfo(“en-US”)) 这是我的错误: System.FormatException未处理Message = String未被识别为有效的DateTime。 有人喜欢这样吗? 为了方便起见,我已经为显示问题的控制台应用程序提供了以下代码。 谢谢杰米 using System; using System.Globalization; class Program { static void Main(string[] args) { string MyDateValue = “Fri, 27 Aug 2010 22:00:07 +0000”; var dt = DateTime.ParseExact(MyDateValue, “ddd, dd MMM YYYY HH:mm:ss +ffff”, new CultureInfo(“en-US”)); } }

使用c#中的正则表达式解析电子邮件

我需要用c#中的正则表达式解析电子邮件文件,即解析包含多个电子邮件的电子邮件文件并将其解析为其成分,例如from,to,bcc等。 用于电子邮件的正则表达式是 “\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*” 我遇到的问题是To,Cc和Bcc有时包含多个电子邮件,并且出现在多行中 To: Me meagain , Me1 meagain ,Me3 meagain 此外,哪个正则表达式将匹配该消息?

.NET HTTP解析器

我正在编写一个应用程序来嗅探一些HTTP流量。 我正在使用WinPcap来访问TCP / IP数据包。 是否有一个库可以帮助我解析HTTP消息? 我自己实现了一个基本的解析器,但我想要更成熟的东西:我不断遇到新的变化(分块消息,gzip压缩等) .NET框架可能有一个HTTP解析器,但是当TCP数据包不是来自直接TCP连接时,我看不到任何使用它的方法。

正则表达式减慢了程序

我正在尝试创建一个程序来解析游戏聊天记录中的数据。 到目前为止,我已经设法让程序工作并解析我想要的数据,但问题是程序变慢了。 目前解析一个10MB的文本文件需要5秒钟,我注意到如果我将RegexOptions.Compiled添加到我的正则表达式,它会下降到3秒。 我相信我已经在我的正则表达式匹配中找到了问题。 由于5个正则表达式,当前读取了一行5次,因此当我稍后添加更多时,程序会变得更慢。 我应该怎么做才能使我的程序不会因多个正则表达式而减速? 所有使代码更好的建议都值得赞赏! if (sender.Equals(ButtonParse)) { var totalShots = 0f; var totalHits = 0f; var misses = 0; var crits = 0; var regDmg = new Regex(@”(?<=\bSystem\b.* You inflicted )\d+.\d", RegexOptions.Compiled); var regMiss = new Regex(@"(?<=\bSystem\b.* Target evaded attack)", RegexOptions.Compiled); var regCrit = new Regex(@"(?<=\bSystem\b.* Critical hit – additional damage)", RegexOptions.Compiled); […]

更改整数的默认NumberStyles?

我有一个具有整数属性的模型。 使用23443提交模型时,模型绑定器工作正常,并且该操作中的值可用。 但是如果使用千位分隔符(如23,443 )提交模型,则不会解析该值,并且属性为零。 但是我发现一个十进制类型的属性可能有千位分隔符,它会解析并正确填充。 我发现默认情况下Int32.Parse()不解析千位分隔符但Decimal.Parse()确实允许千位分隔符。 我不想写支票,如: public ActionResult Save(Car model, FormCollection form) { Int32 milage; if(model.MyProperty == 0 && Int32.TryParse(form[“MyProperty”], NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out milage) { model.MyProperty = milage; } else ModelState.AddModelError(“Invalid”, “Property looks invalid”); […] } 每次我处理这些领域。 它看起来很丑陋,并将所有validation移出模型属性。 将属性的类型更改为十进制只是为了使模型绑定工作似乎不是一个明智的想法。 当我查看模型绑定器时,看起来它正在使用TypeConverter来完成从字符串到类型的转换。 看起来Int32Converter使用带有NumberStyles.Integer Int32.Parse() 。 有没有办法改变Int32Converter的行为,以允许默认情况下解析千位分隔符? 也许在整个应用程序中覆盖Int32.Parse()上的默认NumberStyles ? 或者添加我自己的模型绑定器,用NumberStyles.AllowThousands解析整数NumberStyles.AllowThousands唯一/正确的行动方案?

C#decimal.Parse行为

简短的问题: 为什么这些’ ….. ‘在.NET(C#)中解析小数有效: decimal res = decimal.Parse(“8……15”); // returns 815 decimal res = decimal.Parse(“8…15”); // returns 815 decimal res = decimal.Parse(“8..15”); // returns 815 这是什么原因?