我希望在C#中使用正则表达式来搜索术语,我想在搜索中包含这些术语的复数形式.例如,如果用户想要搜索"管道",那么我也想返回"管道"的结果.
所以我可以这样做......
string s ="\\b" + term + "s*\\b";
if (Regex.IsMatch(bigtext, s) { /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)
当用户输入"压力"并仍然为"管道"/"管道"工作时,我如何修改上述内容以允许我匹配"压力"?
你可以面对的问题是,有很多不规则的名词如man
,fish
和index
.所以你应该考虑使用PluralizationService
有Pluralize
方法的.这是一个显示如何使用它的示例.
获得该术语的复数后,您可以轻松构建一个搜索复数或单数项的正则表达式.
PluralizationService ps = PluralizationService.CreateService(CultureInfo.CurrentCulture);
string plural = ps.Pluralize(term);
string s = @"("+term+"|"+plural+")";
if (Regex.IsMatch(bigtext, s)) {
/* do stuff */
}
Run Code Online (Sandbox Code Playgroud)
这是一个用于删除复数的正则表达式:
/(?<![aei])([ie][d])(?=[^a-zA-Z])|(?<=[ertkgwmnl])s(?=[^a-zA-Z])/g
Run Code Online (Sandbox Code Playgroud)
(演示和源代码)
我知道这并不完全是您所需要的,但它可能会帮助您找到一些东西。
归档时间: |
|
查看次数: |
2003 次 |
最近记录: |