正则表达式python非字母数字字符

时间:2018-11-25 14:45:56

标签: python regex

我有如下字符串(目的是除去字符串末尾的字母数字字符之间的非字母数字字符)

字符串:This$#is% Matrix# %!

我想要的是:This is Matrix# %!

所以我只想消除非字母数字,而不是最后。

我尝试过此正则表达式代码str1 = re.sub(r'([^\s\w]|_)+', ' ', str1),但它消除了所有非alp,包括末尾的非alp。

我该如何解决这个棘手的问题

3 个答案:

答案 0 :(得分:2)

您可以使用否定的超前断言。

>>> s = "This$#is% Matrix#  %!"
>>> re.sub(r'([^\s\w]|_)+(?![^\w]*$)', ' ', s)
'This is  Matrix#  %!'

答案 1 :(得分:0)

我建议您进行两次通过:

  1. 用空格替换一堆“坏”字符。

  2. 用一个空格替换一堆空格。

您曾说过,您只想在后面有字母数字的情况下删除不良字符。您可以为此使用零宽度的超前查询:

bad_chars = r'([^\s\w]|_)+(?=\s*\w)'

(?=...)positive lookahead,,它向前看,以查看模式\s*\w是否与当前位置匹配,但不匹配向前移动-它看起来就很好。

然后用空格替换,折叠空格,就可以完成:

re.sub(bad_chars, ' ', mystring)
re.sub('\s\s+', ' ', mystring)
print(mystring)

答案 2 :(得分:0)

嗨,我觉得我的问题仍然没有得到回答,正如您在下面的输出中看到的那样,我只希望将2个字母字符之间的非字母数字替换为1个空格,矩阵后的部分应保留为它不在字母字符之间。

输入字符串This $#is%Matrix#(这里2个空格)%!

您的输出(标准输出) 这是Matrix#(此处为1个空格)%!

预期输出下载 这是Matrix#(此处为2个空格)%!