首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :删除所有未附加于单词的特殊字符和数字

Python :删除所有未附加于单词的特殊字符和数字
EN

Stack Overflow用户
提问于 2019-11-13 09:24:19
回答 3查看 3.1K关注 0票数 4

我试图删除python中的所有特殊字符和数字,除了直接附在单词上的数字。

我已经成功地为所有的特殊字符和数字附加和不附于文字的情况下,如何做到这样的方式,数字附加是不匹配的。

我所做的是:

代码语言:javascript
复制
import regex as re
string = "win32 backdoor guid:64664646 DNS-lookup h0lla"
re.findall(r'[^\p{P}\p{S}\s\d]+', string.lower())

我得到了输出

win后门guid DNS查找h

但我想要:

win32后门guid查找h0lla

演示:https://regex101.com/r/x4HrGo/1

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-13 09:37:44

要匹配字母数字字符串或只匹配字母单词,可以在re中使用以下模式

代码语言:javascript
复制
import re
# ...
re.findall(r'(?:[^\W\d_]+\d|\d+[^\W\d_])[^\W_]*|[^\W\d_]+', text.lower())

regex演示

详细信息

  • (?:[^\W\d_]+\d|\d+[^\W\d_])[^\W_]*- - 1+字母后面跟着一个数字,或者1+数字后面跟着一个字母,然后是0+字母/数字
  • | -或
  • [^\W\d_]+ -任何1+ Unicode字母

注意到它等同于模式 由PJProudhon发布,它匹配任何1+字母数字字符块,其中至少有一个字母。

票数 2
EN

Stack Overflow用户

发布于 2019-11-13 10:49:19

你可以试试\b\d*[^\W\d_][^\W_]*\b

分解:

代码语言:javascript
复制
\b       # word boundary
/d*      # zero or more digits
[^\W\d_] # one alphabetic character
[^\W_]*  # zero or more alphanumeric characters
\b       # word boundary

初学者:

[^\W]是典型的双否定结构。在这里,您希望匹配任何不是字母数字或_的字符(\W是对\w的否定,它匹配任何字母数字字符加上_ -公共等效[a-zA-Z0-9_])。

它揭示了在这里撰写以下文章很有用:

  • 任何字母数字字符= [^\W_]匹配任何不是非字母数字或_且不是_的字符。
  • 任何字母字符= [^\W\d_]都匹配不是非字母数字或_且不是数字(\d)且不是_的任何字符。

一些人进一步阅读了这里

编辑:

_也被认为是一个单词分隔符时,只需跳过单词边界就可以切换该字符,并使用\d*[^\W\d_][^\W_]*

默认的贪婪星运算符将确保所有相关字符实际上是匹配的。

演示

票数 2
EN

Stack Overflow用户

发布于 2019-11-13 09:31:52

试一下这个RegEx:

代码语言:javascript
复制
([A-Za-z]+(\d)*[A-Za-z]*)

您可以从这里展开它,例如,在第一组和最后一组上翻转*和+来捕获字符串,比如"win32“和"01ex”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58833864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档