我想在我的Python程序中使用正则表达式,只保留包含字母文本字符的单词(即没有特殊字符,如点,逗号,:,等等)
我正在使用此代码从文本文件中获取单词:
find_words = re.compile(r'\w+').findall
这个正则表达式的问题是对于这样的输入:
-----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 : 20110301
20110301164350
ACCESSION NUMBER: 0001393311-11-000011
CONFORMED SUBMISSION TYPE: 10-K
PUBLIC DOCUMENT COUNT: 16
CONFORMED PERIOD OF REPORT: 20101231
FILED AS OF DATE: 20110301
DATE AS OF CHANGE: 20110301
FILER:
我得到这样的输出:
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"
等,而且它还保留了{I}之类的内容,因为我不想保留这些内容单词中的数字,它也保留了mfgwcgyevqgbaqicaf8dsgawrwjaw2snkk9avtbzyzmr6agjlwyk3xmzv3dtinen
等我不想保留的内容。
有关如何获得我想要的0001393311
的任何想法? (即仅包含字母字符)。
答案 0 :(得分:2)
re.match("^[A-Za-z]*$", string):
答案 1 :(得分:0)
如果您需要提取以非字母分隔的字词,则可以使用\b[a-zA-Z]+\b
正则表达式(来自Originator
的输出Name
和Originator-Name:
)。
如果你想限制最有可能是单词的实体,我会建议:
(?<![.-])\b([a-z]{2,}|[A-Z]{1}[a-z]+|[A-Z]{2,})\b(?!\.|@|\-)
见here。此正则表达式将限制匹配数。
答案 2 :(得分:0)
我使用:
(?<=^|\P{L})\p{L}+(?=\P{L}|$)
或,以避免变量lookbehind:
(?<!\p{L})\p{L}+(?=\P{L}|$)
其中:
\p{L} means any letter (unicode)
\P{L} is the opposite of \p{L} ie. NOT a letter
答案 3 :(得分:0)
这里你实际上需要使用负面的后视断言。
(?<!\S)[A-Za-z]+(?!\S)|(?<!\S)[A-Za-z]+(?=:(?!\S))
(?<!\S)[A-Za-z]+(?!\S)
匹配必须包含字母的确切字词。
|
或
(?<!\S)[A-Za-z]+(?=:(?!\S))
一个或多个单词字符,后面必须跟冒号,后面跟不是非空格字符。您也可以使用(?=:\s)
模式而不是(?=:(?!\S))
。