我正在尝试删除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查找hla
但是我想得到:
win32后门GUID DNS查找h0lla
尝试使用此RegEx:
([A-Za-z]+(\d)*[A-Za-z]*)
[您可以从此处展开它,例如,翻转第一组和最后一组上的*和+,以平等地捕获诸如“ win32”和“ 01ex”之类的字符串。
要匹配字母数字字符串或仅字母单词,可以在re
中使用以下模式:
import re
# ...
re.findall(r'\b(?:[^\W\d_]+|(?:[^\W\d_]+\d|\d+[^\W\d_])[^\W_]*)\b', text.lower())
请参见regex demo /
详细信息
\b
-单词边界(?:
-分组构造的开始:[^\W\d_]+
-任意1+ Unicode字母|
-或(?:[^\W\d_]+\d|\d+[^\W\d_])[^\W_]*
-1+个字母后跟一个数字,或者1+数字后跟一个字母,然后是0+个字母/数字)
-分组构造的结尾\b
-单词边界。