我希望在Python程序中有一个regex,只保留包含字母文本字符的单词(即没有特殊字符,如点、逗号、:、!等等)
我使用此代码从文本文件中获取单词:
find_words = re.compile(r'\w+').findall
此正则表达式的问题在于,对于这样的输入:
^{pr2}$我得到的输出如下:
begin
privacy
enhanced
message
proc
type
2001
mic
clear
originator
name
webmaster
www
sec
gov
originator
key
asymmetric
mfgwcgyevqgbaqicaf8dsgawrwjaw2snkk9avtbzyzmr6agjlwyk3xmzv3dtinen
twsm7vrzladbmyqaionwg5sdw3p6oam5d3tdezxmm7z1t
b
twidaqab
mic
info
rsa
md5
rsa
u6u1hjx9a2vnvegmx3cbhhgtr7o
njwodwnjqjg1asldklnjwrulq9hbbcqxoufq
ny7xtb92dctfvejdmkdruw
0001393311
11
000011
txt
20110301
0001393311
11
000011
hdr
sgml
这不是我想要的,因为
A)它不保留我希望它保留的单词,例如"Accession", "Number"
等,它还保留了mfgwcgyevqgbaqicaf8dsgawrwjaw2snkk9avtbzyzmr6agjlwyk3xmzv3dtinen
之类的内容,因为单词中的数字我不想保留,它还保留了我不想保留的0001393311
等。在
关于如何得到我想要的words
有什么想法吗?(即只包含字母字符)。在
如果需要提取用非字母分隔的单词,可以使用}from{})。在
\b[a-zA-Z]+\b
regex(输出Originator
和{如果你想限制那些最有可能是单词的实体,我建议如下:
(?<![.-])\b([a-z]{2,}|[A-Z]{1}[a-z]+|[A-Z]{2,})\b(?!\.|@|\-)
见here。此正则表达式将限制匹配的数量。在
在这里,您实际上需要使用一个否定的look-behind断言。在
(?<!\S)[A-Za-z]+(?!\S)
与必须包含字母表的单词完全匹配。|
或(?<!\S)[A-Za-z]+(?=:(?!\S))
一个或多个单词字符,后面必须跟一个冒号,而冒号后面不能跟非空格字符。也可以使用(?=:\s)
模式来代替(?=:(?!\S))
。DEMO
相关问题 更多 >
编程相关推荐