当前位置:  开发笔记 > 编程语言 > 正文

正则表达式:如何从字符串中获取单词(C#)

如何解决《正则表达式:如何从字符串中获取单词(C#)》经验,为你挑选了2个好方法。

我的输入包含用户发布的字符串.

我想要做的是创建一个包含单词的字典,以及它们被使用的频率.这意味着我想解析一个字符串,删除所有垃圾,并获得一个单词列表作为输出.

例如,输入是 "#@!@LOLOLOL YOU'VE BEEN \***PWN3D*** ! :') !!!1einszwei drei !"

我需要的输出是列表:

"LOLOLOL"

"YOU'VE"

"BEEN"

"PWN3D"

"einszwei"

"drei"

我不是正常表达的英雄,而且一直在谷歌搜索,但我的谷歌功夫接缝很弱......

我如何从输入转到想要的输出?



1> John Gietzen..:

简单的正则表达式:

\w+

这匹配一串"单词"字符.这几乎就是你想要的.

这稍微准确一些:

\w(?

它匹配任意数量的单词字符,确保第一个字符不是数字.

这是我的比赛:

1 LOLOLOL
2你
3人
4 PWN3D
5 einszwei
6 drei

现在,这更像是它.

编辑:
负面观察的原因是一些正则表达式支持Unicode字符.使用[a-zA-Z]会错过很多可取的"单词"字符.允许\w和禁止\d包括可以在任何文本块中启动单词的所有Unicode字符.

编辑2:
我已经找到了一种更简洁的方法来获得负面的后视效果:双重负面角色类,只有一个负面排除.

[^\W\d][\w'-]*(?<=\w)

这与上面的相同,只是它还确保单词以单词字符结尾.最后,有:

[^\W\d](\w|[-']{1,2}(?=\w))*

确保一行中不超过两个非单词字符.Aka,它匹配"word-up"而不是"word-up",这是有道理的.如果你想让它匹配"word-up",而不是"word --- up",你可以2改为a 3.



2> Mike Atlas..:

您应该研究自然语言处理(NLP),而不是正则表达式,如果您要定位多种口语,您也需要将其考虑在内.由于您使用的是C#,请查看SharpNLP项目.

编辑:只有当您关心要分割的单词的语义内容时,才需要使用此方法.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有