Python正则表达式:删除非ASCII字符和以数字结尾的单词

时间:2017-08-02 04:23:33

标签: python regex

我试图用"替换"从字符串中所有非ASCII字符(重音符号,符号),然后替换所有以数字结尾的单词。

我认为r' \ W | \ b [^ a-z] * [^ a-z] \ b'会这样做,因为我认为它说"删除非ASCII字符,或删除以0或更多非字母开头并以非字母结尾的整个单词"。非字母我指的是与[a-z]不匹配的每一个字母。然而," hey2"," a2"," 1a3"仍在那里

#remove all these words:
re.sub(r'\W|\b[^a-z]*[^a-z]\b',' ', "1 123 - hey2 a2 1a3 ".lower()) 
>>>' hey2 a2 1a3 '
#keep all these words:
re.sub(r'\W|\b[^a-z]*[^a-z]\b',' ', "1st first a2a 2bb esta' ".lower()) 
>>>'1st first a2a 2bb esta  '          #This works

我错过了什么?

2 个答案:

答案 0 :(得分:1)

  

删除以数字

结尾的非unicode字符和单词

似乎你想要删除任何非单词字符(与\W模式匹配)和任何“单词”(一系列字母/数字/ _\w模式)以数字结尾。

所以,你可以使用

re.sub(r'\W|\b\w*\d\b', ' ', s)

请注意,如果您在Python 2.x中处理Unicode字符串,则需要传递re.UNICODE标志以使\W\w识别Unicode。

模式详情

  • \W - 一个非单词字符(任何不是字母,数字或_的字符)
  • | - 或
  • \b - 领先的单词边界
  • \w* - 零个或多个(*)单词字符
  • \d - 数字
  • \b - 一个尾随字边界。

请注意,如果您要将_字符视为非字词字符,请将\W替换为[\W_],将\w替换为[^\W_]。< / p>

答案 1 :(得分:0)

你错过了一个(点)。之前 ”*”。

“。*”表示任意字符的数量为0或更多。

Yii::$app->user->identity->getId();