假设我有一个字符串:
“我的活动是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作为优化技巧.