我试图删除python中的所有特殊字符和数字,除了直接附在单词上的数字。
我已经成功地为所有的特殊字符和数字附加和不附于文字的情况下,如何做到这样的方式,数字附加是不匹配的。
我所做的是:
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
发布于 2019-11-13 09:37:44
要匹配字母数字字符串或只匹配字母单词,可以在re中使用以下模式
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+字母数字字符块,其中至少有一个字母。
发布于 2019-11-13 10:49:19
分解:
\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_]*。
默认的贪婪星运算符将确保所有相关字符实际上是匹配的。
演示。
发布于 2019-11-13 09:31:52
试一下这个RegEx:
([A-Za-z]+(\d)*[A-Za-z]*)您可以从这里展开它,例如,在第一组和最后一组上翻转*和+来捕获字符串,比如"win32“和"01ex”。
https://stackoverflow.com/questions/58833864
复制相似问题