Python-regex只保留带有文本字符的单词

Python-regex只保留带有文本字符的单词,python,regex,Python,Regex,我希望在Python程序中有一个正则表达式,只保留包含字母文本字符的单词(即,没有特殊字符,如点、逗号、:,!等) 我使用此代码从文本文件中获取单词: find_words = re.compile(r'\w+').findall 此正则表达式的问题在于,对于这样的输入: -----BEGIN PRIVACY-ENHANCED MESSAGE----- Proc-Type: 2001,MIC-CLEAR Originator-Name: webmaster@www.sec.gov Origin

我希望在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
我得到如下输出:

-----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”
等,它还保留了
mfgwcgyevqgbaqicaf8dsgawrwjaw2snkk9avtbzyzmr6agjlwyk3xmzv3dtinen等我不想保留的东西,因为单词中有数字,它还保留了
0001393311
等我不想保留的东西


关于如何获得我想要的
单词
有什么想法吗?(即仅包含字母字符)。

如果需要提取以非字母分隔的单词,可以使用
\b[a-zA-Z]+\b
regex(从
发起人姓名:
输出
发起人
名称

如果您想限制最有可能是单词的实体,我建议如下:

请参阅。此正则表达式将限制匹配数。

我将使用:

(?<=^|\P{L})\p{L}+(?=\P{L}|$)

在这里,您实际上需要使用否定的lookbehind断言

(?<!\S)[A-Za-z]+(?!\S)|(?<!\S)[A-Za-z]+(?=:(?!\S))
(?
  • (?匹配必须包含字母的确切单词

  • |

  • (?一个或多个单词字符后面必须跟一个冒号,冒号后面不能跟非空格字符。您也可以使用
    (?=:\s)
    模式,而不是
    (?=:(!\s))


你是说这个
r'\b[A-Za-z]+\b'
?如果我有psa:DaytonedMoreRoadMember,这给了我两个词psa和DaytonedMoreRoadMember,但我不想要,因为它无效try
r'(?@adrCoder有效的标准是什么?也许你可以先从形式化开始。@adrCoder-如果“Number:”包含一个有效的词(数字),那么为什么不“psa:DaytoneedMoreRoadMember”(psa)?凭直觉,人们可能很容易理解为什么,但计算机并不是凭直觉做事情的,你必须从你的直觉理解中,提取出精确的规则给计算机程序。find_words=re.compile(r’(?@adrCoder:对于Python不确定,但你可以尝试
\p{L}
而不是
\pL
,请参见我的编辑。仍然给出相同的错误
raise error,v#无效的表达式sre_常量。错误:look behind需要固定宽度的模式
,但我将尝试查看它是否可以工作。感谢您的建议,它编译但不返回单词…我正在调用
find_words=re.compile(r'(?@adrCoder:我不太懂python语法,但它不是:
find_words=re.findall(r')(?)?
(?<!\S)[A-Za-z]+(?!\S)|(?<!\S)[A-Za-z]+(?=:(?!\S))