假设我有一个字符串:
“我的活动是1976年在纽约百老汇发生的”
我有很多这样的字符串,但是位置和日期各不相同.例如:
“我的活动发生在1998年在波士顿第二街举行”
“我的事件发生在1968年,位于华盛顿州的安阿伯”
所以一般形式是:
“我的事件发生在Z上的Y上的X”
我想解析字符串以提取X,Y和Z
我可以使用Split并使用前哨词“ in”,“ on”来分隔所需的令牌,但这似乎很笨拙.但是使用像grammatica这样的完整解析器/词法分析器似乎是重量级的.
建议将不胜感激.
C#是否有一个“简单的”解析器词法分析器?
解决方法:
尝试使用正则表达式模式匹配.这是一个MSDN链接,应该会很有帮助:
http://support.microsoft.com/kb/308252
一个例子可能会有所帮助.请注意,正则表达式解决方案使您能够在看到它们时接受更多的变体.顺便说一句,我拒绝RegEx过大的想法.我不是专家,但是做这样的事情是如此容易,我确实想知道为什么它不经常使用.
var regEx = new Regex(
"(?<intro>.+) in (?<city>.+) on (?<locality>.+) in (?<eventDate>.+)"
);
var match = regEx.Match("My event happens in Baltimore on Main Street in 1876.");
if (!match.Success) return;
foreach (var group in new[] {"intro", "city", "locality", "eventDate"})
{
Console.WriteLine(group + ":" + match.Groups[group]);
}
最后,如果性能是一个真正的问题(如果不是,请忽略此问题),请查看here作为优化技巧.
标签:lexer,string,c,parsing 来源: https://codeday.me/bug/20191102/1995208.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。