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

2024-10-01 11:38:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在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有什么想法吗?(即只包含字母字符)。在


Tags: 代码文本程序字母字符单词rsaregex
3条回答
re.match("^[A-Za-z]*$", string):

如果需要提取用非字母分隔的单词,可以使用\b[a-zA-Z]+\bregex(输出Originator和{}from{})。在

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

(?<![.-])\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)[A-Za-z]+(?!\S)与必须包含字母表的单词完全匹配。

  • |

  • (?<!\S)[A-Za-z]+(?=:(?!\S))一个或多个单词字符,后面必须跟一个冒号,而冒号后面不能跟非空格字符。也可以使用(?=:\s)模式来代替(?=:(?!\S))

DEMO

相关问题 更多 >