谁能推荐一种使用C#执行以下字符串操作的方法

假设我有一个字符串:

“我的活动是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作为优化技巧.

上一篇:在PHP中标记CSS的性能


下一篇:C迭代器源上的re2c扫描仪