提取整个单词

| 我有大量的实际文本,需要将单词拉出来输入到拼写检查器中。我想尽可能多地提取有意义的词,而又不要过多干扰。我知道这附近有很多正则表达式忍者,所以希望有人可以帮我。 目前,我正在提取带有“ 0”的所有字母序列。这是一个很好的近似值,但是它却拖走了很多垃圾。 理想情况下,我想要一些正则表达式(不一定漂亮或高效),该正则表达式提取由自然词分隔符(例如ѭ1limited等)界定的所有字母序列,并忽略任何带有非法边界的字母序列。 但是,我也很高兴能够获得不与数字相邻的所有字母序列。因此,例如
\'pie21\'
不会提取
\'pie\'
,而
\'http://foo.com\'
则会提取
[\'http\', \'foo\', \'com\']
。 我尝试了
lookahead
lookbehind
断言,但它们是按字符应用的(例如,ѭ8want将在我不希望返回任何内容时返回ѭ9return)。我尝试将alpha部分包装为一个词(
(?:[a-z]+)
),但没有帮助。 更详细的信息:数据是电子邮件数据库,因此它大部分都是纯英语的普通数字,但偶尔我会完全忽略诸如
GIHQ4NWL0S5SCGBDD40ZXE5IDP13TYNEA
AC7A21C0
这样的垃圾字符串。我假设其中带有数字的任何字母顺序都是垃圾。     
已邀请:
如果将自己限制为ASCII字母,则使用(设置了
re.I
选项)
\\b[a-z]+\\b
\\b
是单词边界锚点,仅在字母数字\“ words \”的开头和结尾匹配。因此,
\\b[a-z]+\\b
pie
相匹配,但与
pie21
21pie
不匹配。 要也允许其他非ASCII字母,可以使用如下所示的内容:
\\b[^\\W\\d_]+\\b
这也允许带重音符号的字符。您可能需要设置
re.UNICODE
选项,尤其是在使用Python 2时,才能允许
\\w
速记来匹配非ASCII字母。
[^\\W\\d_]
作为否定字符类,允许数字和下划线以外的任何字母数字字符。     
您熟悉单词边界吗? (
\\b
)。您可以使用序列周围的ѭ15并在其中匹配字母来提取单词:
\\b([a-zA-Z]+)\\b
例如,这将捕获整个单词,但停在诸如连字符,句号,分号等标记处。 您可以在Python手册中查看
\\b
序列以及其他内容 编辑此外,如果您要查找比赛前后的数字,则可以在前面/后面使用负数:
(?!\\d)   # negative look-ahead for numbers
(?<!\\d)  # negative look-behind for numbers
    
关于什么:
import re
yourString=\"pie 42 http://foo.com GIHQ4NWL0S5SCGBDD40ZXE5IDP13TYNEA  pie42\"
filter (lambda x:re.match(\"^[a-zA-Z]+$\",x),[x for x in set(re.split(\"[\\s:/,.:]\",yourString))])
注意: split将您的字符串分解为潜在的候选者=>返回“潜在词”列表 set使唯一性过滤=>转换set中的列表,从而删除出现多次的条目。此步骤不是必需的。 filter减少了候选人的数量:获取一个列表,对每个元素应用测试功能,并返回测试通过的元素的列表。在我们的例子中,测试功能为“匿名” lambda:匿名函数,获取一个项目并检查它是否是单词(仅适用于大写或小写字母) 编辑:添加了一些说明     
样例代码
print re.search(ur\'(?u)ривет\\b\', ur\'Привет\')
print re.search(ur\'(?u)\\bривет\\b\', ur\'Привет\')
要么
s = ur\"abcd ААБВ\"
import re
rx1 = re.compile(ur\"(?u)АБВ\")
rx2 = re.compile(ur\"(?u)АБВ\\b\")
rx3 = re.compile(ur\"(?u)\\bАБВ\\b\")
print rx1.findall(s)
print rx2.findall(s)
print rx3.findall(s)
    

要回复问题请先登录注册