Python - 正则表达式只保留带有文本字符的单词

时间:2015-03-12 13:01:47

标签: 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
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的任何想法? (即仅包含字母字符)。

4 个答案:

答案 0 :(得分:2)

re.match("^[A-Za-z]*$", string):

答案 1 :(得分:0)

如果您需要提取以非字母分隔的字词,则可以使用\b[a-zA-Z]+\b正则表达式(来自Originator的输出NameOriginator-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))

DEMO